茉莉花testing中蓝鸟的警告承诺

我已经阅读了关于承诺没有从处理程序返回的新的警告,并有一个相关的问题…

在我的一些unit testing中,我将某些依赖关系的function列出,以使用Jasmine的spyOn函数返回promise。 所以,随着这个新的变化,当我的testing运行时,我看到了不less警告。 我当然可以禁用警告,但我想知道是否有改进的方法,我可以使用,自然会摆脱这样的错误?

例:

beforeEach(function (done) { var formatter = new Formatter(); var promise = Promise.resolve(['1,000', '2.45']); spyOn(formatter, 'format').and.returnValue(promise); // internally calls formatter.format() doStuff(formatter, [1000, 2.4567]).then(done); // promise is not returned }); 

可以添加一个完整的工作plunker,如果这将是有用的?

       

网上收集的解决方案 "茉莉花testing中蓝鸟的警告承诺"

问题是,茉莉花donecallback没有返回任何东西,所以当你做。然后.then(done)你触发蓝鸟的警告, 承诺是在一个处理程序中创build,但没有返回它 。

我通过给Promise对象添加一个新的方法来解决这个问题:

 var Promise = require('bluebird'); Promise.prototype.jasmineDone = function(done) { return this.then(function() { done(); return null; }, function(err) { done.fail(err); return null; }); }; 

然后我重构我的规格(触发警告):

  it('should ...', function(done) { doSomething().then(done, done.fail); }); 

至:

  it('should ...', function(done) { doSomething().jasmineDone(done); });