开发者问题收集

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