NodeJS:aws-sdk 的模拟承诺

克梅尔

我目前正在处理 NodeJS 中的一些代码。

我的代码如下所示:

const AWS = require('aws-sdk');
const PARAMS_ACCOUNT = {
  AttributeNames: [
     "max-instances"
  ]
 };

const ec2 = new AWS.EC2();
const getAccountAttributes = ec2.describeAccountAttributes(PARAMS_ACCOUNT).promise();

function maxInstances() {
    return getAccountAttributes.then(data => {
        return  data.AccountAttributes[0].AttributeValues[0].AttributeValue;
    });
 }

我试着使用aws-sdk-mock,旁边chaiJSmochaJS但我'不知道如何嘲笑.promise()aws-sdk

我的尝试如下所示:

const chai = require('chai');
const mocha = require('mocha');
const awsSDK = require('aws-sdk');
const aws = require('aws-sdk-mock');
const server = require('../instance_limit.js');

const expect = chai.expect;

describe('Sample test', () => {
 it('this is also a test', () => {
  aws.mock('EC2','describeAccountAttributes',function (params, callback){
    callback(null, {AccountAttributes:[{AttributeValues:[{AttributeValue: 10}]}]});
  });
  var awsEC2 = new awsSDK.EC2();
   const instances = server.maxInstances();
   expect(instances).to.equal(10);
  });
});

但是有了这个,我无法嘲笑这个aws-sdk电话。谢谢你的帮助。

克梅尔

我能够通过使用依赖注入的原理来解决这个问题,在这种情况下它可以防止模拟 aws sdk,因为有必要稍微调整我的函数并设置一个默认值。现在看起来像这样:

const AWS = require('aws-sdk');
const PARAMS_ACCOUNT = {
  AttributeNames: [
 "max-instances"
  ]
 };

const ec2 = new AWS.EC2();
const getAccountAttributes = ec2.describeAccountAttributes(PARAMS_ACCOUNT).promise();

function maxInstances(accountAttributes = getAccountAttributes()) {
    return accountAttributes.then(data => {
        return data.AccountAttributes[0].AttributeValues[0].AttributeValue;
    });
}

这现在允许我在测试期间提供示例值,如下所示:

const chai = require('chai');
const mocha = require('mocha');
const server = require('../instance_limit.js');

const expect = chai.expect;

describe('data calculation based on ec2 values', () => {
 it(' expects to return max Instances value equal 10', () => {
   const accountAttributeObject = {AccountAttributes:[{AttributeValues:[{AttributeValue: 10}]}]}
   const accountAttributes = Promise.resolve(accountAttributeObject);
   const instances = server.maxInstances(accountAttributes);

   return instances.then( data => {
     expect(data).to.equal(10);
   });
  });
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用generators +承诺在Firefox SDK附加模块中/与之进行“模拟同步”通信

来自分类Dev

用于 RDS nodejs 的 aws-sdk

来自分类Dev

如何更改 .aws 凭据路径?nodejs (aws-sdk)

来自分类Dev

Firestore NodeJS 管理 SDK,获取丢失文档的承诺错误处理

来自分类Dev

对 NodeJS 的承诺

来自分类Dev

NodeJS:aws-sdk sts.assumeRole无法正常工作

来自分类Dev

用于nodejs的简单aws-sdk无法正常工作

来自分类Dev

模拟OpenXML SDK SpreadsheetDocument

来自分类Dev

模拟OpenXML SDK SpreadsheetDocument

来自分类Dev

模拟承诺链功能

来自分类Dev

模拟承诺链功能

来自分类Dev

开玩笑模拟aws-sdk ReferenceError:初始化之前无法访问

来自分类Dev

是否可以将 EasyMock/JMock 用于 AWS Java SDK 模拟和代码覆盖?

来自分类Dev

模拟茉莉花的承诺

来自分类Dev

AWS Java SDK凭证

来自分类Dev

NodeJS承诺-不叫“那么”

来自分类Dev

执行.Then()承诺NodeJS

来自分类Dev

NodeJS承诺-不叫“那么”

来自分类Dev

发现 Nodejs 承诺

来自分类Dev

使用NodeJS + Express,aws-sdk将文件直接流式传输到s3

来自分类Dev

在NodeJS打字稿的AWS-SDK中为dynamodb找到所有异常类的地方?

来自分类Dev

如何使用AWS Cognito SDK通过使用NodeJS的REST服务对用户进行身份验证?

来自分类Dev

NodeJS的承诺周期内的承诺周期

来自分类Dev

Nodejs承诺子解决父承诺

来自分类Dev

模拟ePOS打印iOS SDK的打印

来自分类Dev

如何启动Android SDK模拟器?

来自分类Dev

AWS Mobile Analytics Unity SDK

来自分类Dev

要使用哪个AWS SDK?

来自分类Dev

AWS Lambda SDK-TooManyRequestsException