npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lambda-simulator

v0.0.19

Published

AWS Lambda integration testing tool

Downloads

273

Readme

License: WTFPL Deployment Status Tests Most recent version in NPM

What is this?

This is a simple project that allows you to unit test your AWS Lambda handlers. Additionally, you can use it to run the Lambda locally for some manual testing.

Do not use this as a replacement for AWS Lambda services in production. This would be a terrible idea.

How do I use it?

Unit testing

First, add the project as a test dependency in package.json file (see most recent version in npm):

"devDependencies": {
    "lambda-simulator": "^version"
    ...
}

Next, import it in your unit test along with your AWS Lambda handler:

const LambdaSimulator = require('lambda-simulator').LambdaSimulator;
const handler = require('../index').handler;

Additionally, if you're planning to proxy your requests through AWS Gateway, import the proxy:

const AwsGatewayLambdaIntegrationProxy = require('lambda-simulator').AwsGatewayLambdaIntegrationProxy;

Finally, create the simulator in your test and add assertions:

describe('my AWS Lambda handler', function() {
   
    const simulator = new LambdaSimulator(handler, new AwsGatewayLambdaIntegrationProxy()); // proxy is optional
    
    it('should reply with status 200', async () => {
        // when:
        const response = await simulator.sendPostRequest('/', { someField: 'someValue' }, { someHeader: 'someHeaderValue' });
        
        // then:
        assert.deepStrictEqual(response.httpStatusCode, 200);
    });
    
});

Path parameters

If you'd like the path parameters to be parsed by the AwsGatewayLambdaIntegrationProxy, you need to provide a URL template. For example this proxy object:

new AwsGatewayLambdaIntegrationProxy('/resource/:resourceId/sub-resource/:subResourceId')

Will yield the following pathParameters object in your Lambda:

{
  "resourceId": "5",
  "subResourceId": "bla"
}

Headers

The AwsGatewayLambdaIntegrationProxy will handle headers passed in the request in two ways. First, all headers will be available in event.headers field, unchanged. Additionally, all headers will be split by comma and available in event.multiValueHeaders field.

Manual testing

If you'd like to test your Lambda manually, start the LambdaSimulator server by calling the listen method:

const LambdaSimulator = require('lambda-simulator').LambdaSimulator;
const handler = require('../index').handler;

new LambdaSimulator(handler).listen();

Now, you can send requests directly to your Lambda:

curl -vsX POST \
     -H 'Content-Type:application/json' \
     -d '{"testVariable": "testValue"}' \
     'http://localhost:3000/test?testQueryParam=testValue'

What features does it have?

Very few. It merely mimics AWS Lambda and, therefore, will never be perfect. It's good enough for testing though.

Stuff that is missing, from the top of my head:

  • many fields when using the AWS API Gateway proxy
  • other proxy implementations
  • memory allocation statistics (not sure if possible with Node)

Contribution guidelines

All I ask for is tests and documentation in form of JS docstrings. Feel free to submit a PR if you feel like it.