在编写 JavaScript 的测试用例时,我们经常使用 Chai 库的 expect 函数来进行断言。然而,使用 expect 函数确实是一种逆向思维。本文将介绍为什么要摒弃逆向思维,以及如何使用其他方式来进行断言。
逆向思维在测试中的问题
逆向思维是指从输出结果反推出输入数据的过程。在测试中,逆向思维往往会导致测试用例过于脆弱,而且很难覆盖完整的代码逻辑。例如,下面这个测试用例:
const expect = require('chai').expect; it('adds 1 + 2 to equal 3', () => { expect(add(1, 2)).to.equal(3); })
这个测试用例虽然看起来很简单,但实际上它只测试了一部分代码逻辑。如果 add 函数的实现变化,这个测试用例很可能就失效了。
因此,在测试中,我们应该尽量避免使用逆向思维,而是采用正向思维。
正向思维在测试中的优势
正向思维是指从输入数据推出输出结果的过程。在测试中,正向思维可以帮助我们更全面地测试代码逻辑,从而提高测试用例的覆盖率。
例如,对于上面那个测试用例,我们可以采用正向思维的方式来编写测试用例:
-- -------------------- ---- ------- ----------- --- ----- -------- -- -- - ----- -------- - - - -- -- -- -- --------- - -- - -- -- -- -- --------- - -- - -- -- -- -- --------- - -- -- --------------------- -- - ----- - -- -- -------- - - ----- ----- ------ - ------ --- ---------------------------------- -- --
这个测试用例通过遍历测试数据来对 add 函数进行测试,从而更全面地测试其代码逻辑。这样一来,即使 add 函数的实现变化,这个测试用例也可以保证其有效性。
使用其他方式进行断言
上面的测试用例虽然看起来比较冗长,但是它确实更加全面,也更容易维护。除了避免使用 expect 函数之外,我们还可以使用其他方式进行断言。例如,使用 assert 库的 equal 函数:
-- -------------------- ---- ------- ----- ------ - ------------------ ----------- --- ----- -------- -- -- - ----- -------- - - - -- -- -- -- --------- - -- - -- -- -- -- --------- - -- - -- -- -- -- --------- - -- -- --------------------- -- - ----- - -- -- -------- - - ----- ----- ------ - ------ --- -------------------- ---------- -- --
这个测试用例使用了 assert.equal 函数来断言结果是否相等。虽然它不够直观,但是它确实更加安全和可靠。
结论
在编写 JavaScript 的测试用例时,我们应该尽量避免使用逆向思维,而是采用正向思维来编写测试用例。这样可以更全面地测试代码逻辑,提高测试用例的覆盖率。此外,为了保证测试用例的可靠性,我们应该避免使用 Chai.expect,采用其他方式来进行断言。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670738fdd91dce0dc865f1df