use*_*582 28 unit-testing timeout angularjs karma-runner
我喜欢使用控制台日志来获得反馈或许太多,有时我会遇到代码,按照惯例,我们在指令/服务/控制器中添加了$ timeout,有时长达500毫秒,现在问题出在单元测试期间,我注意到只有它直接在它构造函数下的console.log被发送到karma并输出到屏幕.
在超时下包装的控制台日志或者在$ timeout下包含的断言不会产生任何结果,好像被忽略了,超时的解决方案是什么?
M.K*_*afi 88
在你的单元测试中,你加载ngMock,$timeout用它的模拟覆盖orignal .模拟$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
}
Run Code Online (Sandbox Code Playgroud)
单元测试:
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()
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18179 次 |
| 最近记录: |