首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS中亚马逊网络服务模拟的故障排除

NodeJS中亚马逊网络服务模拟的故障排除
EN

Stack Overflow用户
提问于 2019-06-20 21:10:10
回答 1查看 376关注 0票数 1

我有以下测试:

代码语言:javascript
复制
const AWSMock = require('aws-sdk-mock');
const AWS = require('aws-sdk');
const sinon = require('sinon');

function sendMetric() {
    const cloudwatch = AWS.CloudWatch();
    cloudwatch.putMetricData();
}

describe('Meh', () => {

    it('meh', () => {
        let sendMetricSpy = sinon.spy();
        AWSMock.mock('CloudWatch', 'putMetricData', sendMetricSpy);
        sendMetric();
        expect(sendMetricSpy.calledOnce).toEqual(true);
    });
});

我希望测试能通过,因为我已经按照the documentation说的做了。这是我试图在我的实际代码中实现的一个精炼示例。

运行测试的实际输出是:

代码语言:javascript
复制
 FAIL  functions/monitor/__test__/j.test.js
  Meh
    ✕ meh (10ms)

  ● Meh › meh

    expect(received).toEqual(expected) // deep equality

    Expected: true
    Received: false

      14 |         AWSMock.mock('CloudWatch', 'putMetricData', sendMetricSpy);
      15 |         sendMetric();
    > 16 |         expect(sendMetricSpy.calledOnce).toEqual(true);
         |                                          ^
      17 |     });
      18 | });
      19 | 

我不知道如何进一步解决这个问题。

我也尝试过setting the aws-sdk object explicity,也有同样的效果。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-06-24 16:43:00

回答了我自己的问题:需要向putMetricData调用传递一个具有正确属性的对象。工作示例:

代码语言:javascript
复制
const REALAWS = require('aws-sdk');
const sinon = require('sinon');
const AWS = require('aws-sdk-mock');

const metricParams = {
    MetricData: [
        {
            MetricName: 'ServiceIsHealthy',
            Dimensions: [
                {
                    Name: 'Stage',
                    Value: 'foo',
                },
            ],
            StorageResolution: '60',
            Timestamp: new Date(),
            Unit: 'None',
            Value: '1',
        },
    ],
    Namespace: 'namespace',
};

test('Should return API Keys',  () => {

    const putMetricData = () => {
        const cloudwatch = new REALAWS.CloudWatch();
        return cloudwatch.putMetricData(metricParams)
            .promise();
    };

    const sinon = require('sinon');
    const putMetricDataSpy = sinon.spy();

    AWS.mock('CloudWatch', 'putMetricData', putMetricDataSpy);

    const apiNames = putMetricData();
    sinon.assert.calledOnce(putMetricDataSpy);

});

如果您不向该方法传递任何内容,或者传递一个空对象,则它将失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56686724

复制
相关文章

相似问题

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