在前端开发中,我们经常需要进行单元测试。Mocha 是一个流行的 JavaScript 测试框架,它提供了丰富的 API 和插件,支持异步和同步测试,以及各种类型的断言和钩子函数。而 Sinon 则是一个用于创建假数据以及模拟和监控函数的 JavaScript 库。Sinon.stub 是其中的一个功能强大的方法,它可以帮助我们轻松创建一个用于测试的假函数,并控制它返回的值和调用次数。
本文将深入讲解 Mocha 测试中 Sinon.stub 的基本用法与示例。
安装
首先,我们需要安装 Mocha 和 Sinon:
npm install mocha sinon --save-dev
用法
创建一个假函数
用 Sinon.stub 方法创建一个假函数非常简单,只需要传入一个需要被“替换”的函数,我们就可以获得一个新的函数,这个函数的行为可以由我们自己定义。
const foo = () => { console.log('Hello, World!'); } const fakeFoo = sinon.stub(window, 'foo'); fakeFoo.callsFake(() => console.log('Fake Hello!')); foo(); // 输出 "Fake Hello!" 而不是 "Hello, World!"
这样就成功地创建了一个名为 fakeFoo
的假函数,我们可以看到在调用 foo()
方法时,输出的是 'Fake Hello!' 而不是 'Hello, World!'。 可以通过 callsFake
来定义该函数的行为。
我们可以使用 restore
方法来恢复原有函数。
fakeFoo.restore(); // 恢复原有函数
检查函数是否被调用
在函数被调用时,我们要检查该函数是否被正确调用,也就是检查它是否被调用了指定的次数。
Sinon.stub 提供了 calledOnce
、calledTwice
和 calledThrice
方法,可以检查函数是否被恰好调用1、2或3次。同时,我们也可以使用 called
或者 notCalled
方法判断函数是否被调用或者未被调用。
-- -------------------- ---- ------- ----- --- - ------------- ------ ------ ------ ---------------------------- -- -- ----- ----------------------------- -- -- ----- ------------------------------ -- -- ---- ------------------------ -- -- ---- --------------------------- -- -- -----
控制函数的返回值
在测试中,通常我们需要控制函数的返回值,以测试代码的其他部分如何响应它。
Sinon.stub 提供了多种方法来控制函数的返回值。第一个方法是 returns
,它会让函数在每次被调用时都返回一个指定的值。
const foo = sinon.stub(); foo.returns(42); console.log(foo()); // 输出 42 console.log(foo()); // 输出 42 console.log(foo()); // 输出 42
要注意的是,每次调用 foo
都会返回相同的值。
第二个方法是 returnsArg
,它会让函数返回被传递给它的特定参数。
const foo = sinon.stub(); foo.returnsArg(0); console.log(foo(12345)); // 输出 12345 console.log(foo(true)); // 输出 true console.log(foo('Foo Bar')); // 输出 "Foo Bar"
第三个方法是 throws
,它会让函数抛出一个指定的错误。
const foo = sinon.stub(); foo.throws(new Error('Oops!')); try { foo(); } catch(e) { console.log(e); //输出 Error: Oops! }
组合多种使用方式
我们可以组合多种使用方式来创建一个复杂的测试场景,比如一个函数需要返回某些特定属性,但是也需要控制其返回值。
-- -------------------- ---- ------- -- ------ ----- ------- - ---- -- - ------ - --- --- ----- ---- ----- ---- -- -- - -- ---- ------------------- -- -- - ----- -- - ---- ----- -------- - - --- ----- ----- ------ ---- -- -- ----- ----------- - ------------------ ----------- ------------------------------------------- ------------ -- - -------------------- --- ---------- ------ --- -------- ------ -- -- - ----- ---- - ------------ ---------------------------------------- --- ---------- ---- -- ------ ------ -- -- - ------------ ------------------------------------------ --- ---
在这个测试场景中,我们通过 withArgs
方法指定了函数被调用时的参数,并通过 returns
方法控制函数的返回值。同时,我们通过 calledOnce
方法断言该函数被恰好调用一次。
总结
在本文中,我们详细介绍了 Sinon.stub 在 Mocha 测试框架中的用法,包括创建假函数、检查函数是否被调用、控制函数的返回值以及组合多种使用方式。通过这些基本用法,我们可以编写出更加简洁、可靠的单元测试,从而提高代码质量和开发效率。
参考文献
- Mocha: https://mochajs.org/
- Sinon: https://sinonjs.org/
- Sinon.stub: https://sinonjs.org/releases/v11.1.2/stubs/
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6489877a48841e98947d0a8b