使用变量调用 jest.spyOn “方法名称”参数

Posted

技术标签:

【中文标题】使用变量调用 jest.spyOn “方法名称”参数【英文标题】:calling jest.spyOn "method name" parameter with a variable 【发布时间】:2022-01-11 17:28:13 【问题描述】:

使用 Typescript 和 Jest,我有一个用方法定义的类

export class myAPI 
   public someMethod()...

并想在其上调用 jest.spyOn,这对于像这样的直接调用效果很好

jest.spyOn(myAPI.prototype, 'someMethod')

但是当试图提供第二个参数方法作为变量时:

const theMethodName : string = 'someMethod'
jest.spyOn(myAPI.prototype, theMethodName)

我收到了Argument of type 'string' is not assignable to parameter of type 'FunctionPropertyNames<Required<myApi>>'.

如何将其类型转换为预期的类型?

【问题讨论】:

const string theMethodName = ... 不是 TypeScript。大概你实际上有const theMethodName: string = ... - 如果你刚刚做了const theMethodName = 'someMethod',那么类型将是'someMethod',你的第一个例子显示它是有效的,而不是string 你是对的 - 我更正了代码......这也为我指出了解决方案 - 谢谢! 【参考方案1】:

确保变量没有显式键入为string,而是any 解决了它!

【讨论】:

这真的解决了它,还是你只是掩盖了一个不同的问题? 我相信它确实解决了它。在我稍微复杂的用例中,我使用test.each(arrayOfParams) 来动态运行多个测试。 spyOn 的参数在数组中定义为一个字符串,它不起作用 - 但显式任何它都起作用。

以上是关于使用变量调用 jest.spyOn “方法名称”参数的主要内容,如果未能解决你的问题,请参考以下文章

useEffect 钩子没有被 jest.spyOn 嘲笑

如何使用 jest.spyOn 测试 RTKQuery 端点

jest中的mock,jest.fn()jest.spyOn()jest.mock()

开玩笑 - 使用 spyOn 函数时,确保不调用被监视的函数

jest中的mock,jest.fn()jest.spyOn()jest.mock()

jest中的mock,jest.fn()jest.spyOn()jest.mock()