ユニットテストでは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