可测试代码的几个原则:
- 单一职责:逻辑尽可能的单一,分离不同的功能
- 接口抽象:针对接口进行测试,具体代码的变化不会影响接口测试
- 层次分离:代码分层,可以进行逐层测试
测试
- BDD:行为驱动开发,注重测试逻辑,常用的
describe, it, before, after
- TDD:测试驱动开发,注重测试结果,常用的
suite, test, setup, teardown
- mocha默认的模式是BDD,要想执行TDD的测试时需要加上参数
mocha -u tdd test.js
Mocha和Jasmine对比
-
Mocha
自身集成度不高(没有断言,spy,异步等)经常要配合Chai,Sinon
等库使用 -
Jasmine
集成度高,自带BBD,spy,方便的异步支持(2.0) -
Jasmine
功能齐全,Mocha
灵活自由
两者功能覆盖范围粗略可以表示为:
Jasmine(2.x) === Mocha + Chai + Sinon - mockserver
Mocha
-
Mocha
是一个JavaScript
的测试框架,chai
是一个断言库,两者应该搭配使用 -
Mocha
提供的钩子包括before(), after(), beforeEach(), afterEach()
可用于测试的预处理和后处理等 - demo
describe('save()', function() {
it('should save without error', function(done) {
...
done();
});
});
//描述应该能连成一句通顺的话
//在对数据库操作的时候,可以加上done()回调函数,解决异步问题
//一个it只能调用一次done,
断言库
- 常用断言库:
should.js/expect.js/chai.js/better-assert/assert
- should.js——BDD风格断言库
foo.should.be()
bar.should.have()
-
expect.js——BDD风格断言库;基于
should.js
简化
expect(foo).to.be()
expect(foo).to.eql()
-
chai——BDD/TDD 双模 ,同时支持
should / expect / assert
三种风格的断言库
assert: assert.equal(something, someting)
should: something.should.equal(something)
expect: expect(something).to.equal(someting)
参考文章推荐:
How to correctly unit test Express server
使用Mocha和Chai来测试Node.js应用
测试框架 Mocha 实例教程
初识 mocha in NodeJS
测试利器mocha
HTTP 服务器测试库 supertest
Mocha官网