I know the title is a quite a mouthful, but if you are trying to run tests on your Lambda functions that interact with AWS Services using the
aws-sdk node module, then you’ve probably run into an issue stubbing or mocking the requests. In this post we’ll learn how to stub different AWS Services with Sinon.JS so that you can properly test your scripts.
UPDATE: AWS Lambda now supports Node v8.10, so we can use
async/await instead of promises. The examples below still work with either v6.10 or v8.10, however, I recommend switching to
async/await as they are more compact than promises. Read my post How To: Stub “.promise()” in AWS-SDK Node.js to learn how to deal with the
.promise() method on aws-sdk services.
Let’s say you have a Lambda function that interacts with AWS’s SQS (Simple Queue Service). v6.10 of Node doesn’t support
async/await, so you will most likely use promises if you don’t want to transpile your code or deal with callback hell. This means you need to Promisify an instance of the AWS SQS service. This is easy enough with:
const AWS = require('aws-sdk') // AWS SDK
const Promise = require('bluebird') // Promise library
const SQS = Promise.promisifyAll(new AWS.SQS())