我是JavaScript测试框架的新手。我想做一点优化,但我遇到了一些问题。该项目正在使用should.js
以下是我原始测试用例的简化版本:
describe('Simple', function() {
describe('Test', function() {
it('should do something', function(done) {
somePromise.then(function(data) {
data.should.above(100);
done();
});
}
it('should do something else but alike', function(done) {
somePromise.then(function(data) {
data.should.above(100);
done();
});
}
}
});
我试图这样做:
var testFunc = function(data) {
it('should do something', function(done) {
data.should.above(100);
done();
});
}
describe('Simple', function() {
describe('Test', function() {
somePromise.then(function(data) {
testFunc(data);
});
somePromise.then(function(data) {
testFunc(data);
});
}
});
承诺是异步的,也许这就是我的优化"没工作?我发现没有"完成"在文档中回调describe
函数。
提前致谢!任何帮助将不胜感激!
答案 0 :(得分:2)
您的示例不起作用since Mocha has finished registering test cases when your promise resolves。
要使用多个断言测试单个promise,您只需在测试开始时创建promise,然后在it块中使用它,如下所示:
describe('A module', function() {
var promise;
before(function () {
promise = createPromise();
});
it('should do something', function() {
return promise.then(function (value) {
value.should.be.above(100);
});
});
it('should do something else', function() {
return promise.then(function (value) {
value.should.be.below(200);
});
});
});
请注意,如果从API调用返回promise,则只会调用一次。 The result is simply cached in the promise for the two test cases.
这也利用you can return promises from test cases而不是使用完成回调这一事实。如果拒绝承诺或者then()调用中的任何断言失败,则测试用例将失败。
假设您想使用相同的断言测试不同的promises,您可以将函数传递给testFunc
,从而创建要测试的承诺。
var testFunc = function(promiseFactory) {
it('should do something', function(done) {
promiseFactory().then(function(data) {
data.should.above(100);
done();
});
});
}
describe('Simple', function() {
describe('Test', function() {
testFunc(function () { return createSomePromise(); });
testFunc(function () { return createSomeOtherPromise(); });
});
});
这是有效的,因为Mocha的it
函数立即在describe块内运行。然后,在实际运行测试用例时,使用promiseFactory
回调创建promise。
你也可以return promises from test cases改变testFunc
以将断言作为这样的承诺返回:
var testFunc = function(promiseFactory) {
it('should do something', function() {
return promiseFactory().should.eventually.be.above(100);
});
}