在前端开发中,测试是非常重要的一个环节。TDD(测试驱动开发)和 BDD(行为驱动开发)是两种常用的测试方法,它们都是先写测试再写代码的方式,可以有效地保证代码的质量和稳定性。而 Chai 就是一款优秀的测试框架之一,它能够帮助我们更方便地实现 TDD / BDD。
本文将介绍如何使用 Chai 施行 TDD / BDD,包括如何进行断言、如何使用不同的匹配器等等,同时还将介绍如何在项目中使用 Chai 进行测试。
断言
测试的核心就是断言(Assertion)。断言就是在对代码进行测试的过程中,对代码的行为或者结果的正确性进行判断。在 Chai 中,有两种主要的断言方式:should 和 expect。顾名思义,should 是期望某件事情发生,而 expect 则是期望某个值被返回。
should
首先,我们来看一下 should 的用法。先通过命令行安装依赖:
npm install chai should -- save-dev
然后在测试文件中引入 should:
var should = require('should');
接下来,我们就可以用 should 来进行断言了。我们可以用 should() 函数将一个对象包装起来,然后调用里面的一些方法来判断期望的结果。比如:
var foo = 'bar'; foo.should.be.a('string'); foo.should.equal('bar');
在以上代码中,我们先定义了一个字符串 foo,然后断言它是一个字符串(方法为 a)并且等于 'bar'。如果期望的结果与实际结果不相符,那么 should 就会抛出一个 AssertionError 异常。这样,我们就可以判断代码的正确性了。
expect
相比于 should,expect 更加常用。同样地,我们先安装依赖:
npm install chai expect -- save-dev
然后在测试文件中引入 expect:
var expect = require('chai').expect;
然后就可以开始使用 expect 断言了。引入 expect 后,我们可以使用 expect() 函数将一个值传入其中,然后调用它的某些方法进行判断。比如:
var foo = 'bar'; expect(foo).to.be.a('string'); expect(foo).to.equal('bar');
这段代码和 should 的代码相同,只是语法稍有不同。使用 expect 第一次传入了 foo,然后调用了它的 to.be.a 和 to.equal 方法进行判断。
匹配器(Matcher)
无论是 should 还是 expect,都可以使用匹配器(Matcher)来进行更细致的判断。匹配器是具有特殊含义的字符串,通过它可以更加精确地指定要测试的内容。
比如说,我们可以使用 .not 来表示相反的意思。比如:
var foo = 'bar'; expect(foo).not.to.be.a('number');
在这段代码中,我们判断 foo 是不是一个 number 类型。因为 foo 不是一个 number 类型,所以 expect 就会通过这个测试。
还有一些常见的匹配器,例如 .to.be.true, .to.be.false, .to.exist, .to.be.null, .to.be.undefined 等等。可以根据实际情况使用。当然, Chai 还提供了其他许多匹配器,你可以前往官方手册查询更多信息。
测试
在了解了 Chai 的基础用法和匹配器之后,我们就可以开始在项目中使用它来进行测试了。其实测试的过程非常简单,只需要将测试代码写在一个特定的目录中,然后调用测试代码即可。
以下是一个测试的示例代码:
-- -------------------- ---- ------- -- ---------- -------- ------ -- - ------ - - -- - -- ---------------- --- ------ - ----------------------- --- --- - ---------------------- --------------- ---------- - ---------- ------ --- --- -- --- --------- ---------- - ------------- ---------------- -------------- ---------------- -------------- ------------------ --- ---
在这个示例中,我们首先定义了一个函数 add,用于进行求和操作。然后我们在测试代码中调用这个函数,判断它的正确性。
在测试代码中,我们使用了 describe 和 it 两个函数。describe 是一个测试套件,用于说明要进行测试的内容,其第一个参数是套件的名称,其第二个参数是一个函数,用于包含测试用例。我们可以在测试用例中使用 it 函数进行测试。it 函数也可以包含一个函数,用于包含具体的测试代码。在这个测试用例中,我们定义了三个不同的测试代码,分别测试了 add 的三个参数组合,并检验了它们的正确性。
最后,我们就可以通过命令行来运行测试了:
mocha test
mocha 是一个测试框架,用于运行测试代码。这里通过它来运行我们的测试文件,在执行后会输出测试结果。如果测试通过,那么输出的结果将会显示所有测试用例的执行时间,以及测试的总体成功率。如果测试失败,输出将会显示失败的详细信息。
总结
在本文中,我们介绍了如何使用 Chai 施行 TDD / BDD,并详细地介绍了断言、匹配器和测试三个方面。因为 TDD 和 BDD 的内容非常广,所以本文并没有进行太细致的探讨,建议读者在阅读本文之后,仔细学习相关内容,更好地使用 Chai 和测试的能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fd9c5795b1f8cacdce985b