摩卡/ Should.js使用asynchronousfunction

我是JavaScripttesting框架的新手。 我想做一点优化,但遇到一些问题。 该项目正在使用should.js

这里是我原来的testing用例的简化版本:

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); }); } }); 

承诺是asynchronous的,也许这就是为什么我的“优化”不起作用的原因? 我没有发现文档中describe函数的“完成”callback。

提前致谢! 任何帮助将不胜感激!

你的例子不起作用, 因为摩卡已经完成注册testing用例,当你的承诺解决 。

用不同的断言testing相同的承诺

要使用多个断言来testing单个承诺,您只需在testing开始时创build承诺,然后在下面的块中使用它:

 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调用返回的,则只会调用一次。 结果被简单地caching在两个testing用例的承诺中。

这也可以利用这个事实,即可以从testing用例中返回promise,而不是使用完成的callback。 如果promise被拒绝,或者then()调用中的任何断言失败,则testing用例将失败。

用相同的断言testing不同的承诺

假设你想使用相同的断言来testing不同的promise,你可以传递一个函数给testFunc来创build被testing的promise。

 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的函数在describe块内部立即运行。 当testing用例实际运行时,使用promiseFactorycallback来创buildpromise。

正如你也可以返回testing用例中的promise,你可以改变testFunc来返回一个断言,如下所示:

 var testFunc = function(promiseFactory) { it('should do something', function() { return promiseFactory().should.eventually.be.above(100); }); }