28
我喜歡使用控制檯日誌的反饋可能太多,有時我遇到的代碼,作爲慣例,我們已經在指令/服務/控制器中添加$超時,有時作爲長爲500毫秒,現在問題出在單元測試期間,我注意到只有console.logs直接在它的構造函數下被髮送到業力並輸出到屏幕上。超時如何在角色測試中運行在業力
將控制檯日誌封裝在超時或更確切的說是$超時下的斷言不會產生任何結果,如果忽略,超時的解決方案是什麼?
我喜歡使用控制檯日誌的反饋可能太多,有時我遇到的代碼,作爲慣例,我們已經在指令/服務/控制器中添加$超時,有時作爲長爲500毫秒,現在問題出在單元測試期間,我注意到只有console.logs直接在它的構造函數下被髮送到業力並輸出到屏幕上。超時如何在角色測試中運行在業力
將控制檯日誌封裝在超時或更確切的說是$超時下的斷言不會產生任何結果,如果忽略,超時的解決方案是什麼?
在您的單元測試中,您加載ngMock
,它用它的模擬覆蓋原始$timeout
。模擬$timeout
不能像真正的JavaScript timeout
一樣工作。爲了讓它調用它內部的代碼,你必須從你的單元測試中執行$timeout.flush()
。
如果$timeout
像真正的timeout
一樣工作,那麼您將不得不爲所有使用$timeout
的函數編寫異步單元測試。
這是一個使用$timeout
簡化功能的一個例子,我如何測試:
gaApi.getReport = function() {
report = $q.defer()
$timeout(function() {
$http({method: 'GET', url: 'https://www.googleapis.com/analytics/v3/data/ga'})
.success(function(body) {
report.resolve(body)
})
}, 300)
return report.promise
}
單元測試:
describe('getReport', function() {
it('should return report data from Google Analytics', function() {
gaApi.getReport().then(function(body) {
expect(body.kind).toBe('analytics#gaData')
})
$timeout.flush()
$httpBackend.flush()
})
})
恕我直言角隊是正確的,寫作異步測試很爛。 'flush()'FTW。 – weltschmerz
我碰到一篇文章,在測試的頂部使用$ timeout.flush,而不是之後。這種方法有什麼不同? http://jasonwatmore.com/post/2015/03/06/AngularJS-Unit-Testing-code-that-uses-$timeout.aspx – Winnemucca