2017-09-21 8 views
0

AWSラムダのテスト方法や特定の依存関係を模擬する方法については、オンラインで多くの記事があります。私は単純化し過ぎているかもしれませんが、その必要はありません。しばらくの間、私はmocha/chaiとlambda-testerを使っています。これは単純なnpm testでテストを走らせるのにうまくいきました。単体テストAWSラムダとjestとlambda-tester

私の問題は今、mocha/chaiの代わりにJestを使うようになってきたので、すべてのテストをJestの構文に合わせて更新しました。しかし、今は私のテストが合格しないことがあります。これは私のテストが非同期を正しく処理していないと思うのですが、私はlesta-testerが私が期待している結果を返すと信じているので、私はJestのドキュメントをどのように利用でき、doneを私のコードに使用するのか分かりません。

私のLambdasは、単純にイメージURLを返します。私のテストでは、それがstatusCode:200であり、そのヘッダーにcontent-typeプロパティがあることを確認する必要があります。それはモカ/チャイ形式であったように、それは一貫して(検証偽陽性ではない)を通過したときにここで

は、私のテストで:

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'); 
     }); 
    }); 
}) 

かなりまっすぐ進みます。さて、ここに矛盾している冗談で私の更新されたテストは、次のとおりです。

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'); 
    }); 
}); 

私が冗談に私の変換で何かを見逃している可能性があり、私は何を参照することはできません。うまくいけば、誰かが私の間違いを見つけて前進するのを助けることができます。

答えて

0

コードに問題はないようです。

mochajestの最大の違いの一つは、jestが同時にテストを実行し、したがって、それはmochaが見逃す可能性があること、あなたのラムダのあなたのハンドラ外の競合状態や変異などの問題を検出することができますということです。

  • 単一のテストを複数回(単一ファイルとtest.onlyを使用して、その単一のテストという)ことを実行してみ:ここ

    は、私はそれをトラブルシューティングするでしょうです。

  • jest --runInBandを使用して、スイート全体をシリアルで実行してみてください。

これらのコードで一貫したエラーが発生した場合は、ハンドラの外部に状態を保存し、別の呼び出しで共有されている競合状態の問題やコードにバグがある可能性があります。