什么是 sinon
Sinon 是一个用于写测试和模拟代码的 JavaScript 库,本质上是一个 spy(函数)、stub(函数)和 mock(对象)库,它还支持 Sinon Fake Timers。Sinon 可以在 Node.js 和浏览器的任何 JavaScript 环境中使用。
安装
可以使用 npm 安装:
npm install sinon --save-dev
如何使用 sinon
Spy(函数)
创建 Spy
通过调用 sinon.spy() 方法可以创建一个 spy 函数:
const myFunction = () => console.log('Hello world!'); const mySpy = sinon.spy(myFunction);
Spy 的调用
通过以下方法可以看到 spy 函数的调用信息:
mySpy.callCount; // 0 myFunction('a', 'b', 'c'); // logs "Hello world!" mySpy.callCount; // 1
Spy 的返回值
通过以下方法可以指定 spy 函数的返回值:
const myFunction = () => 'Hello world!'; const mySpy = sinon.spy(myFunction); mySpy.return('Goodbye world!'); console.log(mySpy()); // 'Goodbye world!'
Stub(函数)
创建 Stub
通过调用 sinon.stub() 方法可以创建一个 stub 函数:
const myFunction = () => console.log('Hello world!'); const myStub = sinon.stub(window, 'alert');
Stub 的调用
调用 stub 函数就像调用原本的函数一样,但实际上不会对界面产生影响:
myStub('Hello world!'); expect(myStub.called).to.be.true; expect(myStub.calledWith('Hello world!')).to.be.true;
Stub 的返回值
指定 stub 函数返回值的方法与 spy 函数类似:
const myStub = sinon.stub(window, 'prompt'); myStub.returns('Hello world!'); console.log(myStub()); // 'Hello world!'
Mock(对象)
创建 Mock
通过调用 sinon.mock() 方法可以创建一个 mock 对象:
const myObj = { doSomething() {} } const myMock = sinon.mock(myObj);
Mock 对象的期望
可以对 mock 对象设置期望,当期望和实际情况不符时,mock 对象会抛出异常:
myMock.expects('doSomething').once().withArgs('Hello'); myObj.doSomething(); // throws error because it was not called with 'Hello'
Mock 对象的恢复
Sinon 可以恢复用于测试,以确保不同测试之间没有任何副作用:
myMock.restore();
总结
Sinon 库提供了一些非常强大的工具来帮助我们编写 JavaScript 测试代码。在本文中,我们介绍了如何使用 sinion 来创建 spies、stubs 和 mock,并且学习了如何检查它们的调用和返回值,以及如何为它们设置期望和恢复测试环境。希望本文对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/81535