模拟一个依赖的构造函数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);