javascript - Jasmine ,AngularJS : Unit test a function which returns a value after timeout

标签 javascript angularjs unit-testing jasmine karma-jasmine

我不确定这个测试哪里出错了。

服务代码:

self.clearMessage = function(interval) {
  if (!interval)
    interval = 2000;

  return $timeout(function() {
    return '';
  }, interval);
};

规范:

it('clears message', function() {
  var result = self.clearMessage();

  $timeout.flush();

  expect(result).toBe('');
});

我还尝试在测试中触发摘要循环但没有成功。我以前从未遇到过这个问题,因为我通常会在超时 block 内设置一个外部变量——这对单元测试来说效果很好。

在这种情况下,当超时内只有返回时,我收到以下错误:

预期 Promise({ $$state: Object({ status: 1, value: '' }), $$timeoutId: 1 }) 为 ''。

编辑/回答

it('clears message', function() {
  self.clearMessage().then(function(response) {
    expect(response).toBe('');
  })

  $timeout.flush();
});

最佳答案

从您的服务代码中调用 AngularJS 的 $timeout 服务会返回一个 Promise。这个 Promise 将...“在达到超时时得到解决。 promise 将通过 fn 函数的返回值得到解决。” https://docs.angularjs.org/api/ng/service/$timeout

您的规范中需要这样的内容:

var result = self.clearMessage();
result.then(function(value) {
  expect(value).toBe('');
});

$timeout.flush();  

JSFiddle

关于javascript - Jasmine ,AngularJS : Unit test a function which returns a value after timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45155167/

相关文章:

javascript - 在 highcharts 中,图例中的数据在数据小于 10000 的情况下重叠

javascript - 我只能获取一个属性的值

javascript - 将 AngularJs javascript 文件包含到 Angular cli 中

javascript - Angular Controller 功能未运行

c# - 单元测试策略 - 验证私有(private)字段的状态

Python - doctest 与 unittest

javascript - 在 JavaScript 中分配变量名称的匿名函数

javascript - 取消选中默认分配复选框 Angular Material 中的选中值

node.js - 使用 mocha 和 sinon 在 Node 中模拟 http 请求

javascript - 从字符串中删除元素并连接它的更好方法是什么?