单元测试 – 在karma中运行的角度测试中超时如何工作

我喜欢使用控制台日志反馈可能太多,有时我运行代码,作为惯例我们已经添加$ 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()
  })
})

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...