簡體   English   中英

用Jest測試承諾鏈

[英]Test promise-chain with Jest

我正試圖用Jest測試promises-chain序列:

someChainPromisesMethod: function() {
    async()
      .then(async1)
      .then(async2)
      .then(result)
      .catch(error);
}

雖然測試單一承諾是好的記錄,但不確定什么是正確的方法(不知道該怎么做TBO)來測試這種鏈。 讓我們假設所有的asyncs都是嘲笑的,只是在他們的身體里解決了Promises(Promise.resolve)。

所以我需要能測試整個序列的東西。

您可以使用jest.fn()來模擬實現並檢查調用函數的內容並返回您想要的內容。 您需要模擬函數中的所有async函數並返回所需的函數。

例如

async = jest.fn(() => {
  return Promise.resolve('value');
});

async1 = jest.fn(() => {
  return Promise.resolve('value1');
});

async2 = jest.fn(() => {
  return Promise.resolve('Final Value');
});

您可以在測試中使用它

it('should your test scenario', (done) => {
  someChainPromisesMethod()
    .then(data => {
      expect(async1).toBeCalledWith('value');
      expect(async2).toBeCalledWith('value1');
      expect(data).toEqual('Final Value');
      done(); 
  });
});

但是,如果你有邏輯,我會把你的鏈變平並分別測試它們,這樣你就可以輕松地測試所有可能性。

使用完成不能解決問題,它會給你一個誤報測試。 如果出於任何原因期望失敗,您的測試將會超時並且您將無法獲得實際結果。

正確的解決方案是返回您的Promise,因此Jest將能夠正確評估期望結果。

在@grgmo示例之后,更好的方法可能是:

it('should your test scenario', () => {
  return someChainPromisesMethod()
    .then(data => {
      expect(async1).toBeCalledWith('value');
      expect(async2).toBeCalledWith('value1');
      expect(data).toEqual('Final Value');
  });
});

暫無
暫無

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

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