简介
sinon-chai 是一个常用的测试工具,它结合了 sinon 和 chai 两个包的功能,以便于编写更加简洁和可读性强的测试代码。在本文中,我们将介绍如何使用 sinon-chai 来进行前端单元测试。
安装
在使用 sinon-chai 之前,需要先安装 sinon 和 chai 这两个包。可以通过以下命令进行安装:
npm install sinon chai --save-dev
接下来,安装 sinon-chai:
npm install sinon-chai --save-dev
使用
安装完成后,在测试文件中引入所需的包:
const chai = require('chai'); const sinon = require('sinon'); const sinonChai = require('sinon-chai'); chai.use(sinonChai);
这段代码中,我们首先引入了 chai 和 sinon 这两个包,并使用 require
方法将它们引入到当前文件中。然后,我们又引入了 sinon-chai 包,并使用 chai.use
方法将其添加到 chai 的插件列表中,以便后续使用。
断言
接下来,我们将介绍一些与断言相关的函数,这些函数是 sinon-chai 提供的。
expect().to.have.been.called
该断言用于判断某个方法是否被调用过。
const spy = sinon.spy(); someFunction(spy); expect(spy).to.have.been.called;
expect().to.have.been.calledOnce
该断言用于判断某个方法是否被调用了一次。
const spy = sinon.spy(); someFunction(spy); expect(spy).to.have.been.calledOnce;
expect().to.have.been.calledTwice
该断言用于判断某个方法是否被调用了两次。
const spy = sinon.spy(); someFunction(spy); expect(spy).to.have.been.calledTwice;
expect().to.have.callCount()
该断言用于判断某个方法被调用的次数。
const spy = sinon.spy(); someFunction(spy); expect(spy).to.have.callCount(2);
Stub
在测试中,有时需要模拟一个函数或者方法,并返回指定的结果。这时可以使用 sinon 的 stub
方法来实现。
const stub = sinon.stub(object, methodName);
其中,object
表示要模拟的对象,methodName
表示要模拟的方法名。接下来,我们将介绍一些与 stub 相关的函数。
expect(stub).to.have.been.calledWith()
该断言用于判断某个方法是否被正确地调用了。
const stub = sinon.stub(); someFunction(stub); expect(stub).to.have.been.calledWith('a', 'b');
stub.returns()
该方法用于指定 stub 方法的返回值。
const stub = sinon.stub().returns(42);
stub.callsArg()
该方法用于指定 stub 方法的回调函数。
const stub = sinon.stub().callsArg(0);
Mock
Mock 是一种强化版的 Stub,它除了可以模拟方法的返回值,还可以判断该方法被调用的次数和参数等。
在使用 Mock 时,需要先创建一个 Mock 对象,并调用相应的方法。以下是一些常用的 Mock 方法:
mock.expects()
该方法用于指定要测试的方法,并返回一个 expectation 对象。
const mock = sinon.mock(object); mock.expects('methodName');
expectation.once()
该方法用于指定该方法只能被调用一次。
const mock = sinon.mock(object); const expectation = mock.expects('methodName').once();
expectation.twice()
该方法用于指定该方法只能被调用两次。
const mock = sinon.mock(object); const expectation = mock.expects('methodName').twice();
expectation.withArgs()
该方法
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/50943