我有以下测试:
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说的做了。这是我试图在我的实际代码中实现的一个精炼示例。
运行测试的实际输出是:
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,也有同样的效果。
我做错了什么?
发布于 2019-06-24 16:43:00
回答了我自己的问题:需要向putMetricData调用传递一个具有正确属性的对象。工作示例:
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);
});如果您不向该方法传递任何内容,或者传递一个空对象,则它将失败。
https://stackoverflow.com/questions/56686724
复制相似问题