在编写前端代码时,测试是非常重要的一环,而 Chai 是一个非常流行的断言库。本文将详细介绍 Chai 的使用方法,包括断言的基本使用、链式调用、异步测试以及自定义断言等内容。
断言的基本使用
在使用 Chai 进行断言时,我们首先需要引入 Chai:
const { expect } = require('chai');
然后就可以进行简单的断言了。例如,我们要判断一个变量的值是否等于 5:
const a = 5; expect(a).to.equal(5);
我们使用 expect
构造函数创建了一个断言对象,并使用 to
属性来表达我们所期待的结果。在上述代码中,我们期待变量 a
的值为 5,因此使用 to.equal(5)
来进行断言。
这里需要注意的是,Chai 提供了多种不同的可链式的语法,我们同样可以使用 assert
函数来达到相同的效果:
const assert = require('chai').assert; const a = 5; assert.equal(a, 5);
这两种方式的效果是相同的。
链式调用
Chai 内置支持链式调用,可以使我们的测试代码更为简洁。例如:
expect('hello world').to.be.a('string').and.include('world');
在这个例子中,我们对一个字符串进行了两种断言,首先使用 to.be.a
确定其类型为字符串,然后使用 and.include
断言包含字符串 "world"。
具体而言,我们可以使用 to
来表达期望结果,然后连接可链式调用的其他属性,包括:
a
或an
,表示期望对象的类型;include
或contain
,表示期望值包含某个子值;equal
或equals
,表示期望值等于(全等,即使用===
判断)某个值;above
或greaterThan
,表示期望值大于某个值;below
或lessThan
,表示期望值小于某个值;match
,表示期望值匹配某个正则表达式。
这些方法之间完全可以链式调用,从而达到简洁的效果。
异步测试
异步代码的测试是前端测试中的一个重要部分,而 Chai 也内置支持异步测试。
在测试异步代码时,我们首先需要向 Mocha 框架传入一个回调函数 done
,用于表示异步操作的结束。当我们测试异步代码的返回值时,我们需要在断言中使用 eventually
,例如:
it('should return "hello" after 1s', function(done) { setTimeout(function() { expect(getHello()).to.eventually.equal('hello'); done(); }, 1000); });
在上述例子中,我们使用了 setTimeout
函数模拟了异步操作,使用 expect
断言表达式 getHello()
应返回字符串 'hello'。其中,关键字 eventually
可以告知 Chai 我们正在测试异步代码,并等待其返回结果。
自定义断言
当我们使用 Chai 进行断言时,有时我们需要定义自己的断言。例如,我们希望对数组进行断言,判断其每个元素是否都是偶数:
-- -------------------- ---- ------- -------- ------------------- - ----- ---------- - ---- --- --------------------------------------------- -------------------------------- - --- --------------------------------------------------- --- - ----- ------- - --- -- --- ----- ---------- - --- -- --- --------- -- ---------------------------------------- --------- -- ---------------------------------------
在上述代码中,我们编写了一个新的断言函数 allEvenNumbers
,并使用了 Chai 断言库使其可以拥有链式调用的语法。其中,我们使用了 chai.Assertion
构造函数创建了一个新的断言对象,并使用了 new
操作符显式创建了这个对象。
然后,我们首先使用 to.be.an
确定对象为数组类型,然后使用 forEach
方法对数组中的每一个元素进行断言。在这里,我们使用 new chai.Assertion(num).to.be.a
创建了一个新的断言对象,并判断这个值是一个数字(.to.be.a('number')
),并且是偶数(.that.is.even
)。
最后,我们使用了 expect
函数来对两个数组进行断言,其中对于符合预期的结果,我们使用 not.to.throw
表达式,而对于不符合预期的结果,我们使用了 to.throw
表达式。
结论
在本文中,我们详细介绍了 Chai 断言库的使用方法,包括了基本使用、链式调用、异步测试以及自定义断言等内容。使用 Chai 可以大大简化我们的测试工作,希望本文对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67188f1bad1e889fe22c7747