如何测试返回Promise的方法

时间:2016-08-26 12:14:02

标签: javascript angular typescript es6-promise

我正在编写一个Angular 2 RC5应用程序,并使用Karma和Jasmine进行单元测试。

我有一个返回Promise<Foo> 的方法(它在对angular的http.post的调用之上)我希望在完成之后运行一些断言。

像这样的东西不起作用

let result = myService.getFoo();
result.then(rslt => expect(1+1).toBe(3)); // the error is lost

这会产生“未处理的承诺拒绝”警告,但错误被抑制并且测试通过。 如何根据我已解决的承诺运行断言?

注意:

  • .catch()方法似乎不是我想要的。我不想记录或做任何继续正常程序流程的事情,我想要通过测试。
  • 我见过的代码看起来像$rootScope.$digest();。我不确定这类东西的打字稿等价物是什么。似乎没有办法说:“我有一个承诺,我会在这里等到我有同步结果”。

2 个答案:

答案 0 :(得分:5)

测试看起来应该是这样的:

it('should getFoo', function (done) {
  let result = myService.getFoo();
  result
    .then(rslt => expect(rslt).toBe('foo'))
    .then(done);
});

答案 1 :(得分:1)

使用done回调有效,但您也可以这样做:

(注意return

it('should getFoo', function () {
  let result = myService.getFoo();
  return result
    .then(rslt => expect(rslt).toBe('foo'))
});