Javascript 茉莉花测试中蓝鸟承诺的警告

Javascript 茉莉花测试中蓝鸟承诺的警告,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我已经阅读了关于新警告的内容,并且有一个相关的问题 在我的一些单元测试中,我使用Jasmine的spyOn函数删除了某些依赖项的功能,以返回承诺。因此,有了这个新的变化,我在测试运行时看到了很多警告。我当然可以禁用警告,但我想知道是否有一种改进的方法可以用来自然地消除此类错误 例如: beforeEach(function (done) { var formatter = new Formatter(); var promise = Promise.resolve(['1,000',

我已经阅读了关于新警告的内容,并且有一个相关的问题

在我的一些单元测试中,我使用Jasmine的spyOn函数删除了某些依赖项的功能,以返回承诺。因此,有了这个新的变化,我在测试运行时看到了很多警告。我当然可以禁用警告,但我想知道是否有一种改进的方法可以用来自然地消除此类错误

例如:

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

如果需要的话,可以添加一个完整的工作Plunk吗?

问题是jasmine的
done
回调返回任何东西,所以当你执行
时,(done)
你会触发蓝鸟的警告

我通过向Promise对象添加一个新方法解决了这个问题:

var Promise = require('bluebird');

Promise.prototype.jasmineDone = function(done) {
    return this.then(function() {
        done();
        return null;
    }, function(err) {
        done.fail(err);
        return null;
    });
};
然后我重构了我的规范(这会触发警告):

致:


是否会返回
兑现承诺,而不是传递
已完成
回调是否有效?那么你应该这样做。你是说返回
doStuff()…
?如果是这样,我仍然相信您看到了警告,因为
promise
不会被返回。
 it('should ...', function(done) {
    doSomething().then(done, done.fail);
 });
 it('should ...', function(done) {
    doSomething().jasmineDone(done);
 });