Promise
的状态转化,并非难以理解的概念。可是,在写测试用例的时候,可能会掉进坑里。此处为我的记录。git
var should = require('should'); describe('promise assert', function () { it('normal assert', function (done) { var first = Promise.resolve('A'); first.then(function(value) { value.should.equal('A'); done(): }) }); it('timeout assert', function (done) { var first = Promise.resolve('A'); first.then(function(value) { value.should.equal('AB'); done(); }) }); });
上述为最开始写的测试用例,理所固然的觉得第一个pass
,第二个fail
。结果是第一个pass
,第二个timeout error
。因为暂时性短路,没有发现问题所在,后在repo询问后得知结果。github
每个断言,失败后会throw error
,不会继续往下执行,而后then
方法会返回一个rejected promise
,于是done
方法不会被调用,因此会出现timeout error
。promise
询问以后,mocha
最新版本已经支持基于promise
的断言,而再也不依赖done
回调函数。代码修改以下:函数
var should = require('should'); describe('promise assert', function () { it('normal assert', function () { var first = Promise.resolve('A'); return first.then(function(value) { value.should.equal('A'); }) }); it('timeout assert', function () { var first = Promise.resolve('A'); return first.then(function(value) { value.should.equal('AB'); }) }); });
此时,断言结果如预期。测试
QQ:491229492
https://github.com/bornkillerui