模拟一个依赖的构造函数Jest

我是Jest的新手。 我设法嘲笑我自己的东西,但似乎卡住嘲笑一个模块。 具体的构造函数。

usage.js

const AWS = require("aws-sdk") cw = new AWS.CloudWatch({apiVersion: "2010-08-01"}) ... function myMetrics(params) { cw.putMetricData(params, function(err, data){}) } 

我想在testing中做这样的事情。

 const AWS = jest.mock("aws-sdk") class FakeMetrics { constructor() {} putMetricData(foo,callback) { callback(null, "yay!") } } AWS.CloudWatch = jest.fn( (props) => new FakeMetrics()) 

但是,当我在usage.js使用它时,cw是一个mockConstructor而不是FakeMetrics

我意识到,我的方法可能是“不太习惯”,所以我会很好的任何指针。

这是一个最小的例子https://github.com/ollyjshaw/jest_constructor_so

npm install -g jest

jest

问题是一个模块如何被嘲笑。 作为参考状态,

在需要的时候用一个自动模拟版本模拟一个模块。 <…>返回链接的笑话对象。

AWS不是模块对象,而是jest对象,分配AWS.CloudFormation不会影响任何内容。

此外,它在一个地方是CloudWatch在另一个地方是CloudWatch

testing框架不需要重新创build模拟function,它们已经在那里了。 它应该是这样的:

 const AWS = require("aws-sdk"); const fakePutMetricData = jest.fn() const FakeCloudWatch = jest.fn(() => ({ putMetricData: fakePutMetricData })); AWS.CloudWatch = FakeCloudWatch; 

并断言:

 expect(fakePutMetricData).toHaveBeenCalledTimes(1);