Typescript 如何强式键入笑话模拟

Typescript 如何强式键入笑话模拟,typescript,jestjs,typescript-typings,ts-jest,Typescript,Jestjs,Typescript Typings,Ts Jest,我想强烈地输入我的笑话模拟。在某种程度上,我可以让它工作,但当一个类有私有属性时,我就卡住了 另外一个问题是,当我使用Mock(我目前的方式)时,返回类型是原始类型,但当我必须访问Jest添加的任何方法时,我必须对其进行类型转换,以便访问方法。有更好的方法吗?我曾尝试使用jest.Mock,jest.Mock,jest.MockInstance 如果有人能给我指出正确的方向那就太好了 classmytest{ 构造函数(私有只读消息:字符串){} public foo():字符串{ 返回此.ms

我想强烈地输入我的笑话模拟。在某种程度上,我可以让它工作,但当一个类有私有属性时,我就卡住了

另外一个问题是,当我使用Mock(我目前的方式)时,返回类型是原始类型,但当我必须访问Jest添加的任何方法时,我必须对其进行类型转换,以便访问方法。有更好的方法吗?我曾尝试使用
jest.Mock
jest.Mock
jest.MockInstance

如果有人能给我指出正确的方向那就太好了

classmytest{
构造函数(私有只读消息:字符串){}
public foo():字符串{
返回此.msg;
}
}
const myTestMock:jest.Mock=jest.fn(()=>({
msg:'私人',
foo:jest.fn().mockReturnValue('aaa'),
}));
//错误结果:
//类型“{msg:string;foo:Mock;}”不可分配给类型“MyTest”。
//属性“msg”在类型“MyTest”中是私有的,但在类型“{msg:string;foo:Mock;}”中不是私有的
const myTestMockInstance:MyTest=newmytestmock('a');
console.log(myTestMockInstance.foo());//-->aaa
//访问jest模拟方法:
(myTestMockInstance).mockClear();//({
msg:'私人',
foo:jest.fn().mockReturnValue('aaa'),
})
);
  • 有一个帮助器可以生成类型:look
  • 通常,您应该测试公共接口,而不是实现。您可以将该逻辑提取到公共接口(可能是提供该接口的另一个类),而不是测试私有方法

  • 有一个库可以帮助您使用带有Jest的Typescript中的强类型模拟:

    我不确定你是否应该访问你的mock的私有属性。正如Kim Kern所说,您应该只对测试单元的依赖关系的公共接口感兴趣

    jest mock extended包含一个
    mock()
    方法,该方法返回一个
    MockProxy
    ,允许您访问
    .mockReturnValue()

    从“jest mock extended”导入{mock};
    WidgetService接口{
    listMyWidgets():{id:string}[];
    };
    const mockedService=mock();
    mockedService.listMyWidgets.mockReturnValue([{id:'widget-1'}]);
    
    私人物业有什么问题?在我看来,您应该只模拟(和测试)公共接口。你看过这篇文章了吗@Kimkern问题是排字错误,因为模拟不包含私有属性,所以我的模拟与我想模仿的类型不匹配。谢谢链接,有趣的文章,尽管我认为它是一个围绕它的工作可能是目前最好的选择。我希望jest已经有了这样一种方法,而不是创建自己的别名。是的,这肯定只是一种解决方法。:/我正在使用它,我也有这个方法的问题。但由于jest将在下一个主要版本中迁移到typescript,我希望这会变得更好。另请参见中的ts jest示例