Typescript 为什么jest v24模拟类需要私有方法
我需要使用jest v24+创建typescript类的模拟实现。我特别尝试创建一个模拟类,该类被注入构造函数,并模拟将被调用以返回特定响应的函数 如何为每个测试创建模拟 更多信息: 我已经开始了一个新项目,现在正在使用JESTV24,它在编写测试时产生了一个我无法解决的问题 使用下面的jest v23示例,之前我可以如下模拟Randomiser类:Typescript 为什么jest v24模拟类需要私有方法,typescript,visual-studio-code,jestjs,Typescript,Visual Studio Code,Jestjs,我需要使用jest v24+创建typescript类的模拟实现。我特别尝试创建一个模拟类,该类被注入构造函数,并模拟将被调用以返回特定响应的函数 如何为每个测试创建模拟 更多信息: 我已经开始了一个新项目,现在正在使用JESTV24,它在编写测试时产生了一个我无法解决的问题 使用下面的jest v23示例,之前我可以如下模拟Randomiser类: const Mock = jest.fn<Randomiser>(() => ({ getRandom: jest.fn()
const Mock = jest.fn<Randomiser>(() => ({
getRandom: jest.fn().mockReturnValue(10)
}));
const Mock=jest.fn(()=>({
getRandom:jest.fn().mockReturnValue(10)
}));
它将成功编译和构建
从v24开始,fn函数将进行常规添加
,我不知道这是否与行为的改变有关,但现在我得到一个错误:
属性“rand”在类型“{getRandom:Mock;}”中丢失,但在类型“Randomiser.ts(2741)中是必需的
导入“jest”;
类随机化器{
public getRandom():数字{
返回这个.rand();
}
private rand():编号{
返回Math.random();
}
}
类乘数{
专用随机化器:随机化器;
构造函数(randomiser:randomiser){
this.randomiser=randomiser;
}
多重随机数(因子:数字):数字{
返回Math.floor(this.randomiser.getRandom()*因子);
}
}
描述(“测试”,()=>{
它(“10 x 2=20”,()=>{
const Mock=jest.fn(()=>({
getRandom:jest.fn().mockReturnValue(10),
rand:jest.fn()//这一行我得到一个错误,因为它应该是私有的,没有这一行我得到上面的错误。
}));
expect(新乘数(新Mock()).multiplyRandom(2)).toBe(20);
})
})
我希望能够以与v23相同的方式编写模拟,也就是说,我可以模拟类,只需要模拟我要调用的函数
现在我必须模拟所有函数,包括私有函数和私有属性,然后它抱怨这些函数不是私有的。两种解决方案:
1。使用Partial
,这将允许您部分模拟您的类:
const Mock = jest.fn<Partial<Randomiser>, []>(() => ({
getRandom: jest.fn().mockReturnValue(10)
}));
2。不要为模拟指定任何类型。
另一种方法是不指定mock的类型,这会使mock类型any
const Mock = jest.fn(() => ({
getRandom: jest.fn().mockReturnValue(10)
}));
然后可以直接按原样注入mock,但当然,在本例中不会键入它
const mock = new Mock();
expect(new Multiplier(mock).multiplyRandom(2)).toBe(20);
谢谢你,自从《笑话24》以来,我不能部分地模仿一门课,我也不知道部分的内容,谢谢你!
const Mock = jest.fn(() => ({
getRandom: jest.fn().mockReturnValue(10)
}));
const mock = new Mock();
expect(new Multiplier(mock).multiplyRandom(2)).toBe(20);