我喜欢使用控制台日志反馈可能太多,有时我运行代码,作为惯例我们已经添加$ timeout在指令/服务/控制器,有时长达500毫秒,现在的问题是在单元测试,我注意到只有console.logs直接在它的构造函数被发送到karma并输出到屏幕。
包裹的控制台日志在超时或更换包裹断言在$超时不产生任何结果,如果被忽略,什么是超时的解决方案?
在你的单元测试中,你加载ngMock,它用它的模拟覆盖原始的$ timeout。 Mock $ timeout不像真正的JavaScript超时那样工作。要让它调用它里面的代码,你必须做$ timeout.flush()从你的单元测试。
如果$ 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() }) })
原文地址:https://www.jb51.cc/angularjs/145433.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。