如果在抛出任何错误的时候如何在promise中做出断言,不会冒出来呢?
与摩卡运行这个结果超时,而不是让摩卡赶上错误,所以它可能会立即失败..
var when = require('when'); var should = require('should'); describe('', function() { it('', function(done) { var d = when.defer(); d.resolve(); d.promise.then(function() { true.should.be.false; false.should.be.true; throw new Error('Promise'); done(); }); }); });
http://runnable.com/me/U7VmuQurokZCvomD
是否有另外一种方式在诺言中作出断言,如果失败,他们会被摩卡抓住,导致立即失败?
根据柴的build议,我研究了它,似乎我必须有一个直接访问的承诺对象,对不对? 问题是,我没有直接使用诺言。如果我简化,我的坏,但这将是一个更接近现实的例子
function core_library_function(callback){ do_something_async(function which_returns_a(promise){ promise.then(function(){ callback(thing); }); }); } describe('', function() { it('', function(done) { core_library_function(function(thing){ ... done(); }); }); });
所以我实在无法直接控制这个承诺,它被抽象得太远了。
当使用Mocha的承诺时,您必须在testing中return
承诺,并且希望删除done
参数,因为callback没有被使用。
it('', function() { var d = when.defer(); d.resolve(); return d.promise.then(function() { throw new Error('Promise'); }); });
在“ 与承诺一起工作”的文档中对此进行了描述:
或者,不要使用
done()
callback,而是可以返回一个promise。