簡體   English   中英

如何測試返回Promise的方法

[英]How to test a method returning a 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();代碼$rootScope.$digest(); 我不確定這類東西的打字稿等價物是什么。 似乎沒有辦法說:“我有一個承諾,我會在這里等到我有同步結果”。

測試看起來應該是這樣的:

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

使用done回調有效,但您也應該能夠這樣做:

(注意return

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM