2017-11-13 20 views
0

私はaws lambdaを探しています。どのように人々は、APIゲートウェイ要求の応答のためのハーネスをテストしていますか? Javaでは、私はこれのようなビットを持っています。aws lambda js unit testing

import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; 
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; 
... 
@Test 
void turnsBarToFooTest() { 

    TestContext ctx = new TestContext(); //implements com.amazonaws.services.lambda.runtime.Context 

    Fooer handler = new Fooer(); 

    APIGatewayProxyRequestEvent request = new APIGatewayProxyRequestEvent(); 
    Map<String, String> params = HashMap.of("thing_to_foo", "bar"); 
    request.setPathParameters(params.toJavaMap()); 

    APIGatewayProxyResponseEvent response = handler.handleRequest(request, ctx); 
    assertEquals(200, response.getStatusCode().intValue()); 
    assertEquals("foo", response.getBody()); 
} 

私はJestとES6でこれを複製するのは本当に簡単です。同様の既知のイベントオブジェクトが使用されますか?どうすればそれらを冗談で結ぶことができますか?

答えて

1

CloudFrontのLambdaのHostヘッダーに基づいてセキュリティヘッダーを追加する機能を作った。テストのために私はJESTを使い、基本的にAWSのオブジェクトをこのように嘲笑しました。

google.test.js

const handler = require('../../src/functions/google').handler; 
const testEventGenerator = require('./cloudfront-event-template-generator'); 

test('it adds xss protection',() => { 
    const event = testEventGenerator(); 
    const callback = jest.fn(); 
    handler(event, {}, callback); 
    expect(event.Records[0].cf.response.headers['x-xss-protection'][0].key).toBe('X-XSS-Protection'); 
    expect(event.Records[0].cf.response.headers['x-xss-protection'][0].value).toBe('1; mode=block'); 
    expect(callback.mock.calls.length).toBe(1); 
}); 

cloudfront-event-template-generator.js

module.exports =() => ({ 
    Records: [ 
    { 
     cf: { 
     config: { 
      distributionId: 'EXAMPLE' 
     }, 
     request: { 
      headers: { 
      host: [ 
       { 
       key: 'host', 
       value: 'www.google.com' 
       } 
      ] 
      } 
     }, 
     response: { 
      status: 200, 
      headers: { 
      'last-modified': [ 
       { 
       key: 'Last-Modified', 
       value: '2016-11-25' 
       } 
      ], 
      vary: [ 
       { 
       key: 'Vary', 
       value: '*' 
       } 
      ], 
      'x-amz-meta-last-modified': [ 
       { 
       key: 'X-Amz-Meta-Last-Modified', 
       value: '2016-01-01' 
       } 
      ] 
      }, 
      statusDescription: 'OK' 
     } 
     } 
    } 
    ] 
}); 
0

私は私が望んでやって冗談を持っています。テスト応答のマーティンのアイデアは、より多くの関与を受けるようになるので役に立ちます。ありがとうございます。

test('fooer will foo a bar', done => { 

    const context = {} 
    const request = {pathParameters:{thing_to_foo:'foo'}} 
    const callback = (bar, foo) => { 
    expect(foo.body).toBe('bar') 
    done() 
    } 
    myHandler.handler(request, context, callback) 

})