Jest.js 试图模拟一个模块,我在我的大部分组件中导入

gc0ot86w  于 2023-10-14  发布在  Jest
关注(0)|答案(1)|浏览(156)

我有一个React项目。在这个项目中,我们使用一些SDK来处理与身份验证相关的活动。这个SDK几乎在所有组件中都是导入的。这个SDK有其他的内部依赖。

import { exampleSDK } from "../../path/exampleSDK";

const exampleComponent = () => {
   const { onAuthenticate, onLogout } = exampleSDK({}) // just few examples

   return (<><div>Example Component</div>/</>)
}

这个exampleSDK有内部依赖,当我试图在单元测试中调用组件时,它似乎失败了。我不需要为SDK编写单元测试。我希望在测试组件时能够模拟exampleSDK的实现。目前,当我从"@testing-library/react"调用带有render()函数的组件时,我得到以下错误。

TypeError: Cannot read properties of undefined (reading 'y')

> 12 | ExampleHandler.prototype = Object.create(window.x.y.prototype)
                                                         ^

这在exampleSDK内部调用的模块中实现。
我尝试使用Object.defineProperty(window, 'x', {y: {}}),但没有工作(也许我做错了)。
有没有办法跳过错误部分,或者是否可以模拟SDK的实现?

vlju58qv

vlju58qv1#

如果你想模拟你的SDK,你可以通过jest.mock()来实现。在你的测试中试试这个

jest.mock('../../path/exampleSDK', () => ({
  exampleSDK: (args) => {
    // Return some values such as:
    return {
      onAuthenticate: jest.fn(),
      onLogout: jest.fn()
    };
  }
}));

test('your test description', () => {
  // Write your test here
})

嘲笑的方式不止一种。上面只是其中之一。
您可以 checkout jest.spyOn().mockImplementation().mockReturnValue()
在jest docs上搜索这些东西-https://jestjs.io/docs/mock-function-api

相关问题