首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS: aws的模拟承诺

NodeJS: aws的模拟承诺
EN

Stack Overflow用户
提问于 2018-03-16 07:20:07
回答 1查看 2K关注 0票数 1

我目前正在编写NodeJS中的一些代码。

我的代码如下所示:

代码语言:javascript
复制
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之外,但我不知道如何嘲笑aws-sdk.promise()

我的尝试如下:

代码语言:javascript
复制
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调用了。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-21 08:27:53

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

代码语言:javascript
复制
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;
    });
}

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

代码语言:javascript
复制
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);
   });
  });
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49315137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档