2016-02-09 158 views
2

我讀過關於關於Promises not returning from handlers新的警告,並且有一個相關的問題...警告測試

在我的一些單元測試,我存根出一定的依賴性返回承諾的功能使用茉莉花的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 
}); 

可以添加一個完整的工作plunker,如果這樣做是有用的?

+0

將'返回'承諾,而不是傳遞'done'回調工作?那你應該這樣做。 – Bergi

+0

你說的是返回'doStuff()...'嗎?如果是這樣,我仍然相信你會看到警告,因爲'promise'沒有被返回。 – Alex

回答

2

問題是,茉莉花does notdone回調返回任何東西,所以當你做.then(done)時,你觸發藍鳥的a promise was created in a handler but none were returned from it警告。

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

我加入了新的方法,以無極對象解決了這個