使用 Mocha 测试 Promise 时发生错误
Posted
技术标签:
【中文标题】使用 Mocha 测试 Promise 时发生错误【英文标题】:Error Occurs in Testing Promises With Mocha 【发布时间】:2016-12-30 01:06:15 【问题描述】:我正在使用 mocha 和 chai 对 AngularJS 服务执行一些单元测试。该服务具有不同的功能,每个功能都返回一个承诺。
我面临的问题是测试没有等待承诺值在断言之前得到解决。我知道 done() 回调可以与 mocha 一起使用。所以,我尝试过使用它。但这也给了我一个错误。代码如下:
describe('Service Test', function()
var factory;
beforeEach(module('Test'));
beforeEach(inject(function(_QueryService_)
factory = _QueryService_;
)
);
it('should check simpleQuery method',function(done)
var promise = factory.query("args");
var value;
promise.then(function(data)
value = data;
assert.equal(1,2);
done();
, function(error)
assert.equal(3,4);
done();
);
);
);
所以现在的问题是测试没有失败(应该如此)。相反,它只是超时并给我一个错误:“超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调”
如果我不包含 done 回调,则测试通过,因为它甚至不评估条件。
有人可以提出解决办法吗?谢谢!
【问题讨论】:
当你不使用done
时,你真的返回了promise吗?如果你不这样做,它将无法工作。
@leMS 我的解决方案对您有用吗?如果是,请将其标记为已解决。 :)
【参考方案1】:
我在 Node.js 中使用 chai 和 mocha 进行测试。我测试的大部分内容都是承诺。这里有一些示例代码可以帮助您入门。
var chai = require('chai'),
expect = chai.expect;
chai.use(require('chai-things'))
.use(require('chai-as-promised'));
chai.should();
describe(' Testing:', function()
describe('#getBlah', function()
describe('If blah', function()
it('Should should blah', function()
return service.getBlahAsync(foo, bar).should.eventually.have.length(0);
);
);
describe('If blahblah', function()
it('Should should blahblah', function()
return service.getBlahAsync(foo, bar).should.eventually.all.have.property(foobarbaz);
);
);
您还可以执行一些操作,例如增加测试的超时持续时间。可以在here 找到相关文档。
【讨论】:
以上是关于使用 Mocha 测试 Promise 时发生错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mocha 进行测试:基于 Promise 的测试不会自行运行?
使用 mocha 和 chaiAsPromised 测试异步函数时的断言错误
当 app 是 Promise 时启动 mocha chai 测试