2017-07-17 50 views
1

我不確定我在這個測試中出錯的地方。Jasmine,AngularJS:單元測試一個函數,它在超時後返回一個值

服務代碼:

self.clearMessage = function(interval) { 
    if (!interval) 
    interval = 2000; 

    return $timeout(function() { 
    return ''; 
    }, interval); 
}; 

規格:

it('clears message', function() { 
    var result = self.clearMessage(); 

    $timeout.flush(); 

    expect(result).toBe(''); 
}); 

我也試着引發消化週期試驗,但沒有成功。我之前從未遇到過這個問題,因爲我通常會在超時模塊內設置一個外部變量 - 這對於單元測試非常有效。

在這種情況下,當只有我收到以下錯誤超時內部回報:

Expected Promise({ $$state: Object({ status: 1, value: '' }), $$timeoutId: 1 }) to be ''.

編輯/ ANSWER

it('clears message', function() { 
 
    self.clearMessage().then(function(response) { 
 
    expect(response).toBe(''); 
 
    }) 
 

 
    $timeout.flush(); 
 
});

回答

1

調用AngularJS的您服務代碼中的210服務正在向您返回承諾。這個承諾......「在達到超時時解決,承諾將用fn函數的返回值解決。」 https://docs.angularjs.org/api/ng/service/$timeout

你需要在你的規格是這樣的:

var result = self.clearMessage(); 
result.then(function(value) { 
    expect(value).toBe(''); 
}); 

$timeout.flush(); 

JSFiddle

+0

也沒有工作,但我希望它的工作就像我上面的預期,因爲這是這個函數是如何在使用生產。我覺得我沒有正確地測試一些東西。 無論如何,感謝您的幫助 –

相關問題