如何测试返回Promise的方法

Nat*_*per 5 javascript typescript es6-promise angular

我正在编写一个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
Run Code Online (Sandbox Code Playgroud)

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

笔记:

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

dfs*_*fsq 5

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

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