簡體   English   中英

使用Jest和Lambda-Tester對AWS Lambda進行單元測試

[英]Unit test AWS Lambda with jest and lambda-tester

在線上有很多關於如何測試AWS Lambda以及如何模擬某些依賴項的帖子。也許我已經簡化了,但是我不需要任何簡化。 一段時間以來,我一直在使用mocha / chai和lambda-tester 這對於使用簡單的npm test運行測試來說效果很好。

我現在的問題是,由於我將開始使用Jest而不是mocha / chai,因此我更新了所有測試以匹配Jest語法(與大多數語法非常相似)。 但是現在,我的測試有時會通過,有時會失敗。 雖然這讓我覺得我的測試沒有正確處理異步,我不知道怎樣才能利用玩笑文檔,並使用在我的代碼,因為我相信拉姆達測試儀返回我期待的結果。

為簡單起見,我的Lambda之一只是返回了圖片網址。 我的測試應驗證是否具有statusCode:200以及標頭具有content-type屬性。

這是我通過mocha / chai格式的測試,它一貫通過(驗證不是誤報):

describe('Lambda to return imageURl:  ', () => {

  it('should return a status code 200 and have the correct header', () => {
    return LambdaTester( lambda.handler )
      .event( testEvent )
      .expectSucceed( ( result ) => {
        expect( result.statusCode ).to.equal(200);
        expect( result.headers ).to.have.property( 'Location' );
      });
  });
})

非常坦率的。 現在,這是我在Jest中更新的測試,它不一致:

test('should return a status code 200 and have the correct header', () => {
  return LambdaTester( lambda.handler )
    .event( testEvent )
    .expectSucceed( ( result ) => {
      expect( result.statusCode ).toBe(200);
      expect( result.headers ).toHaveProperty( 'Content-Type' );
    });
});

轉換為Jest的過程中可能遺漏了一些東西,但看不到。 希望有人能發現我的錯誤並幫助我前進。

您的代碼似乎沒有錯。

mochajest之間的最大區別之一是, jest同時運行測試,因此它可以檢測出競爭狀況以及Lambda上的處理程序外部的突變等可能導致mocha丟失的問題。

這是我要解決的問題:

  • 嘗試多次運行該單個測試(該單個文件和該單個測試使用test.only )。
  • 嘗試使用jest --runInBand串行運行整個套件。

如果我們遇到一致的失敗,那么您可能會遇到競態條件問題和/或代碼中的錯誤,其中您將狀態存儲在處理程序之外,並且狀態由不同的調用共享。

暫無
暫無

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

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