在我们编写 JavaScript 代码时,为了保证代码质量和可靠性,测试是非常必要的。在前端开发中,我们通常使用 Mocha 和 Chai 来进行测试。而在进行函数测试时,我们常常需要测试一个函数是否被调用过。本文将介绍使用 Chai 来测试内部 JavaScript 函数是否被调用的方法。
Chai 简介
Chai 是一个基于 BDD 和 TDD 风格的断言库,Chai 允许我们自己编写断言,它自身也提供了很多常用的断言方法,比如:
expect()
:期望某个值或变量的结果符合或不符合某种预期值;assert()
:根据预期结果来断言某个函数或变量的结果是否正确;should()
:使任何对象都可以调用 should,从而断言它是否符合预期值。
对于函数的测试,我们常常需要使用到 spy()
和 stub()
方法来测试一个函数是否被调用。
spy()
方法
spy()
方法可以监视一个函数的调用情况,它会记录下函数被调用的次数、参数、返回值等信息。通过 chai-spies
这个扩展包,我们可以在 Chai 中方便地使用 spy()
方法。下面是使用 spy()
测试一个函数调用情况的示例代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ----- - ---------------------- ---------------- -------- ------ -- - ------ - - -- - ------------ --- ---- ---------- - ------ --- ---- ---------- - ----- ------ - ---------------- ------- ------ --- ------------------------------------- ------------------------------------------ --- --- ---展开代码
代码中,我们首先引入了 chai
和 chai-spies
这两个模块。然后定义了一个 foo()
函数,在测试用例中我们使用了 chai.spy.on()
方法来监视 foo()
函数的调用情况,并将监视结果保存到 spyFoo
变量中。
在测试用例中,我们调用 foo()
函数,并使用 expect(spyFoo).to.have.been.called()
方法来验证 foo()
函数被调用过,使用 expect(spyFoo).to.have.been.called.with(1, 2)
方法来验证 foo()
函数被调用时的参数是否正确。
stub()
方法
stub()
方法可以替换掉一个函数,从而使得函数返回我们预定义的值或执行我们预定义的代码。同样是通过 chai-spies
扩展包来使用,下面是使用 stub()
修改函数返回值的示例代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ----- - ---------------------- ---------------- -------- ------ -- - ------ - - -- - ------------ --- ---- ---------- - ------ --- ------- ---------- - ----- ------- - --------------- ------------------- ---------------- ------------- ------------------ --- ---展开代码
代码中,我们先定义了一个 foo()
函数。在测试用例中,我们使用 chai.stub()
方法来替换 foo()
函数。我们通过调用 stubFoo.withArgs(1, 2).returns(100)
方法来修改 foo()
函数在参数为 1
和 2
时的返回值,返回 100
。
我们运行 foo(1, 2)
函数时,由于 chai.spy()
已经将 foo()
函数替换掉了,所以会返回我们预定义的值。
总结
通过 chai-spies
扩展包,我们可以方便地在 Chai 中使用 spy()
和 stub()
方法来测试内部 JavaScript 函数的调用情况。而在实际开发中,我们可以使用这两个方法进行单元测试,保证代码质量和可靠性,提高代码可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6487ca5b48841e989465740e