Jest 错误——无法读取未定义的属性“get”
2021-05-29
15027
我在 React 的一个组件内配置了一个服务,但在使用 jest 和 testing-library 时遇到了问题,应用程序可以运行,但测试被阻止了。
import { appSetupConfig } from '.../myapp'
import theConfig from '.../config'
useEffect(() => {
const allowAppInstance = appSetupConfig();
allowAppInstance.get(theConfig).then((value) => {
if (value.something) {
Do Something;
}
...the rest of code
}, []);
这个 theConfig 是一个包含对象的外部文件。 这是错误:
TypeError: Cannot read property 'get' of undefined
37 | const allowAppInstance = appSetupConfig();
38 |
> 39 | allowAppInstance.get(theConfig).then((value) => {
有没有办法在 jest 的 setup.js 中模拟这个 get? 我不一定需要测试这个项目,但没有它我就无法继续。
1个回答
是的,有。因此,看起来您在某个时候调用了
jest.mock('.../myapp')
或类似函数。在 Jest 为模块创建的模拟对象中,每个模拟函数都返回
undefined
。您需要在
appSetupConfig
上模拟一个返回值,该返回值本身就是一个模拟对象,具有您需要的方法,例如
get
。然后
get
又需要返回一个模拟承诺,依此类推,直到需要的深度。在您的设置文件中,它看起来像:
import { appSetupConfig } from '.../myapp'
...
jest.mock('.../myapp');
appSetupConfig.mockReturnValue({
get: jest.fn().mockResolvedValue({ something: jest.fn() }),
});
您的
.then
块随后将在测试中被调用,其中
value
设置为
undefined
,但您可以模拟不同的解析值或对特定测试的承诺的拒绝。
kdau
2021-05-29