使用AWS-SDK的Promise支持和DocumentClient进行模拟 [英] Mocking using aws-sdk-mock's promise support with DocumentClient

查看:12
本文介绍了使用AWS-SDK的Promise支持和DocumentClient进行模拟的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用aws-sdk-mock的Promise支持编写单元测试。我正在使用DocumentClient。

我的代码如下所示:

const docClient = new AWS.DynamoDB.DocumentClient();

const getItemPromise = docClient.get(params).promise();
   return getItemPromise.then((data) => {
   console.log('Success');
   return data;
}).catch((err) => {
   console.log(err);
});

我的模拟和单元测试如下所示:

const AWS = require('aws-sdk-mock');
AWS.Promise = Promise.Promise;

AWS.mock('DynamoDB.DocumentClient', 'get', function (params, callback)
{
   callback(null, { Item: { Key: 'test value } });
});

dynamoStore.getItems('tableName', 'idName', 'id').then((actualResponse) => {
  // assertions
  done();
});

运行我的单元测试,不返回我的测试值,它实际上绕过了我的模拟,直接调用DynamoDB。我做错了什么?如何正确设置我的模拟?

推荐答案

您的代码不清楚,但aws-sdk-mock有此注释

注意:需要在被测函数内部初始化AWS服务,才能模拟SDK方法

因此以下内容将无法正确模拟

var AWS      = require('aws-sdk');
var sns      = AWS.SNS();
var dynamoDb = AWS.DynamoDB();

exports.handler = function(event, context) {
  // do something with the services e.g. sns.publish 
}

但这将

var AWS = require('aws-sdk');

exports.handler = function(event, context) {
  var sns      = AWS.SNS();
  var dynamoDb = AWS.DynamoDB();
  // do something with the services e.g. sns.publish 
}

单击此处查看更多信息https://github.com/dwyl/aws-sdk-mock#how-usage

这篇关于使用AWS-SDK的Promise支持和DocumentClient进行模拟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆