网上有很多关于如何测试AWS lambdas的帖子,以及如何模拟某些依赖项等。也许我过度简化,但我不需要任何这些。有一段时间,我一直在使用mocha / chai和lambda-tester。这适用于使用简单npm test
运行测试。
我现在的问题是,因为我被引用来使用Jest而不是mocha / chai,所以我已经更新了所有的测试以匹配Jest语法(与大多数情况非常相似)。然而,现在,我的测试有时会通过,有时会失败。虽然这让我觉得我的测试没有正确处理异步,但我没有看到如何使用Jest文档并在我的代码中使用done,因为我相信lambda-tester会返回我期望的结果。
为了简单起见,我的一个Lambdas只返回一个图片网址。我的测试应该验证是否有statusCode:200
并且标头具有内容类型属性。
这是我的测试,因为它是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时错过了一些内容,但我看不清楚是什么。希望有人能发现我的错误并帮助我前进。
答案 0 :(得分:0)
您的代码似乎没有任何问题。
mocha
和jest
之间最大的区别之一是jest
同时运行测试,因此它可以检测Lambda上处理程序之外的竞争条件和突变等问题mocha
1}}可能会错过。
我会解决这个问题:
test.only
的单个测试)。jest --runInBand
串行运行整个套件。如果我们遇到一致的失败,那么你可能会遇到竞争条件问题和/或代码中的错误,你可以在你的处理程序之外存储状态,并且它会被不同的调用共享。