我使用mocha和chai对AngularJS服务执行一些单元测试。该服务具有不同的功能,每个功能都返回一个承诺。
我面临的问题是测试不是在等待断言之前要解决的promise值。我知道 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()回调"
如果我没有包括完成回调,那么测试通过,因为它甚至不评估条件。
有人可以建议修复吗?谢谢!
答案 0 :(得分:1)
我使用chai和mocha在Node.js中进行测试。我测试的大部分都是承诺。这里有一些示例代码可以帮助您入门。
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的文档。