dwyl/aws-sdk-mock được TopGit xếp vào nhóm dự án mã nguồn mở, với 1.1k sao trên GitHub, viết chủ yếu bằng TypeScript. :rainbow: AWSomocks for Javascript/Node.js aws-sdk tested, documented & maintained. Contributions welcome!
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
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.
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/dwyl/aws-sdk-mock là nguồn chính thức.
dwyl/aws-sdk-mock có bao nhiêu sao?
dwyl/aws-sdk-mock có 1.1k sao GitHub — tải lại trang để xem số mới nhất, hoặc xem trực tiếp github.com/dwyl/aws-sdk-mock. TopGit phản chiếu số sao của GitHub nhưng không cam kết đến từng phút.
dwyl/aws-sdk-mock có phải mã nguồn mở không?
Có — dwyl/aws-sdk-mock phát hành theo license Apache-2.0, nghĩa là mã nguồn mở để đọc, fork và (tùy license) tái sử dụng. Mã: github.com/dwyl/aws-sdk-mock.
dwyl/aws-sdk-mock còn đang phát triển không?
Commit gần nhất trên dwyl/aws-sdk-mock là 9 ngày trước (theo timestamp GitHub). Repo có 106 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
dwyl/aws-sdk-mock là gì?
dwyl/aws-sdk-mock (dwyl/aws-sdk-mock) là dự án TypeScript trên GitHub. Theo mô tả gốc: :rainbow: AWSomocks for Javascript/Node.js aws-sdk tested, documented & maintained. Contributions welcome!
Đọc đầy đủ README ở tab phía trên.
Vẫn đang phân vân về aws-sdk-mock?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về aws-sdk-mock.