我是一个新的笑话。我已经设法模仿我自己的东西,但似乎被困在模仿一个模块。特别是建筑师。
usage.js
const AWS = require("aws-sdk")
cw = new AWS.CloudWatch({apiVersion: "2010-08-01"})
...
function myMetrics(params) {
cw.putMetricData(params, function(err, data){})
}
字符串
我想在测试中做这样的事情。
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_sonpm install -g jest
个jest
个
3条答案
按热度按时间s4n0splo1#
上面的答案是有效的。然而,在使用jest一段时间后,我只会使用mockImplementation功能,这对mocking构造函数很有用。
下面的代码可以作为一个例子:
字符串
请注意,在示例中,**new CloudWatch()**只返回一个空对象。
htzpubme2#
问题是如何模拟一个模块。如参考文献所述,
在需要时用自动模拟版本模拟模块。返回<...>用于链接的jest对象。
AWS
不是模块对象,而是jest
对象,分配AWS.CloudFormation
不会有任何影响。另外,在一个地方是
CloudWatch
,在另一个地方是CloudFormation
。测试框架不需要重新发明模拟函数,它们已经存在了。它应该类似于:
字符串
并Assert:
型
lxkprmvk3#
根据文档,
mockImplementation
也可以用来模拟类构造函数:字符串
如果你的类构造函数有参数,你可以将
jest.fn()
作为参数传递(例如:const some = new SomeClass(jest.fn(), jest.fn());
个