dwyl/aws-sdk-mock — 1.1k★ on GitHub (TypeScript). :rainbow: AWSomocks for Javascript/Node.js aws-sdk tested, documented & maintained. Contributions welcome!
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
This module was created to help test AWS Lambda functions but can be used in any situation where the AWS SDK needs to be mocked.
This library is best suited for AWS SDK for Javascript (v2) - see the introductory post on the AWS blog for more context.
If you are using AWS SDK v3 you might not need this library, see:
aws-sdk-mock/issues#209
If you are new to Amazon WebServices Lambda
(or need a refresher),
please checkout our our Beginners Guide to AWS Lambda:
https://github.com/dwyl/learn-aws-lambda
Why
What
Getting Started
Documentation
Background Reading
Why?
Testing your code is essential everywhere you need reliability.
Using stubs means you can prevent a specific method from being called directly. In our case we want to prevent the actual AWS services to be called while testing functions that use the AWS SDK.
What?
Uses Sinon.js under the hood to mock the AWS SDK services and their associated methods.
Documentation
AWS.mock(service, method, replace)
Replaces a method on an AWS service with a replacement function or string.
Param
Type
Optional/Required
Description
service
string
Required
AWS service to mock e.g. SNS, DynamoDB, S3
method
string
Required
method on AWS service to mock e.g. 'publish' (for SNS), 'putItem' for 'DynamoDB'
replace
string or function
Required
A string or function to replace the method
AWS.restore(service, method)
Removes the mock to restore the specified AWS service
Param
Type
Optional/Required
Description
service
string
Optional
AWS service to restore - If only the service is specified, all the methods are restored
method
string
Optional
Method on AWS service to restore
If AWS.restore is called without arguments (AWS.restore()) then all the services and their associated methods are restored
i.e. equivalent to a 'restore all' function.
AWS.remock(service, method, replace)
Updates the replace method on an existing mocked service.
Param
Type
Optional/Required
Description
service
string
Required
AWS service to mock e.g. SNS, DynamoDB, S3
method
string
Required
method on AWS service to mock e.g. 'publish' (for SNS), 'putItem' for 'DynamoDB'
replace
string or function
Required
A string or function to replace the method
AWS.setSDK(path)
Explicitly set the require path for the aws-sdk
Param
Type
Optional/Required
Description
path
string
Required
Path to a nested AWS SDK node module
AWS.setSDKInstance(sdk)
Explicitly set the aws-sdk instance to use
Param
Type
Optional/Required
Description
sdk
object
Required
The AWS SDK object
How? (Usage)
installaws-sdk-mock from NPM
npm install aws-sdk-mock --save-dev
Use in your Tests
Using plain JavaScript
const AWS = require('aws-sdk-mock');
AWS.mock('DynamoDB', 'putItem', function (params, callback){
callback(null, 'successfully put item in database');
});
AWS.mock('SNS', 'publish', 'test-message');
// S3 getObject mock - return a Buffer object with file data
AWS.mock('S3', 'getObject', Buffer.from(require('fs').readFileSync('testFile.csv')));
/**
TESTS
**/
AWS.restore('SNS', 'publish');
AWS.restore('DynamoDB');
AWS.restore('S3');
// or AWS.restore(); this will restore all the methods and services
const updateTableSpy = sinon.spy();
AWS.mock('DynamoDB', 'updateTable', updateTableSpy);
// Object under test
myDynamoManager.scaleDownTable();
// Assert on your Sinon spy as normal
assert.isTrue(updateTableSpy.calledOnce, 'should update dynamo table via AWS SDK');
const expectedParams = {
TableName: 'testTableName',
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
}
};
assert.isTrue(updateTableSpy.calledWith(expectedParams), 'should pass correct parameters');
NB: The AWS Service needs to be initialised inside the function being tested in order for the SDK method to be mocked e.g for an AWS Lambda function example 1 will cause an error ConfigError: Missing region in config whereas in example 2 the sdk will be successfully mocked.
Example 1:
const AWS = require('aws-sdk');
const sns = AWS.SNS();
const dynamoDb = AWS.DynamoDB();
exports.handler = function(event, context) {
// do something with the services e.g. sns.publish
}
Example 2:
const AWS = require('aws-sdk');
exports.handler = function(event, context) {
const sns = AWS.SNS();
const dynamoDb = AWS.DynamoDB();
// do something with the services e.g. sns.publish
}
Also note that if you initialise an AWS service inside a callback from an async function inside the handler function, that won't work either.
Example 1 (won't work):
exports.handler = function(event, context) {
someAsyncFunction(() => {
const sns = AWS.SNS();
const dynamoDb = AWS.DynamoDB();
// do something with the services e.g. sns.publish
});
}
Example 2 (will work):
exports.handler = function(event, context) {
const sns = AWS.SNS();
const dynamoDb = AWS.DynamoDB();
someAsyncFunction(() => {
// do something with the services e.g. sns.publish
});
}
Nested services
It is possible to mock nested services like DynamoDB.DocumentClient. Simply use this dot-notation name as the service parameter to the mock() and restore() methods:
NB: Use caution when mocking both a nested service and its parent service. The nested service should be mocked before and restored after its parent:
// OK
AWS.mock('DynamoDB.DocumentClient', 'get', 'message');
AWS.mock('DynamoDB', 'describeTable', 'message');
AWS.restore('DynamoDB');
AWS.restore('DynamoDB.DocumentClient');
// Not OK
AWS.mock('DynamoDB', 'describeTable', 'message');
AWS.mock('DynamoDB.DocumentClient', 'get', 'message');
// Not OK
AWS.restore('DynamoDB.DocumentClient');
AWS.restore('DynamoDB');
Don't worry about the constructor configuration
Some constructors of the aws-sdk will require you to pass through a configuration object.
const csd = new AWS.CloudSearchDomain({
endpoint: 'your.end.point',
region: 'eu-west'
});
Most mocking solutions with throw an InvalidEndpoint: AWS.CloudSearchDomain requires an explicit 'endpoint' configuration option when you try to mock this.
aws-sdk-mock will take care of this during mock creation so you won't get any configuration errors!
If configurations errors still occur it means you passed wrong configuration in your implementation.
Setting the aws-sdk module explicitly
Project structures that don't include the aws-sdk at the top level node_modules project folder will not be properly mocked. An example of this would be installing the aws-sdk in a nested project directory. You can get around this by explicitly setting the path to a nested aws-sdk module using setSDK().
Due to transpiling, code written in TypeScript or ES6 may not correctly mock because the aws-sdk object created within aws-sdk-mock will not be equal to the object created within the code to test. In addition, it is sometimes convenient to have multiple SDK instances in a test. For either scenario, it is possible to pass in the SDK object directly using setSDKInstance().
Example:
// test code
const AWSMock = require('aws-sdk-mock');
import AWS from 'aws-sdk';
AWSMock.setSDKInstance(AWS);
AWSMock.mock('SQS', /* ... */);
// implementation code
const sqs = new AWS.SQS();
Configuring promises
If your environment lacks a global Promise constructor (e.g. nodejs 0.10), you can explicitly set the promises on aws-sdk-mock. Set the value of AWS.Promise to the constructor for your chosen promise library.
The most recent commit recorded on dwyl/aws-sdk-mock was 8 days ago, based on the GitHub push timestamp. The repository has 106 forks — one of the better signals of community interest.
How many stars does dwyl/aws-sdk-mock have?
dwyl/aws-sdk-mock has 1.1k GitHub stars — refresh the page for the live number, or check github.com/dwyl/aws-sdk-mock. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is dwyl/aws-sdk-mock open source?
Yes — dwyl/aws-sdk-mock ships under the Apache-2.0 license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/dwyl/aws-sdk-mock.
What is dwyl/aws-sdk-mock?
dwyl/aws-sdk-mock (dwyl/aws-sdk-mock) is a TypeScript project on GitHub. From the project's own README: :rainbow: AWSomocks for Javascript/Node.js aws-sdk tested, documented & maintained. Contributions welcome!
Where do I read more about dwyl/aws-sdk-mock?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/dwyl/aws-sdk-mock is the definitive source.
Read full README in the tab above.
Still deciding about aws-sdk-mock?
One click hands the question to an AI along with this page — see what it says about aws-sdk-mock.