Kev*_*ert 9 testing typescript reactjs jestjs create-react-app
我有一个简单的“util”模块,带有默认导出和 2 个命名导出。
const foo = () => 'foo'
export default foo
export const bar = () => 'bar'
export const baz = () => 'baz'
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我是这样嘲笑它的:
jest.mock('./util', () => ({
__esModule: true,
default: jest.fn(() => 'mocked foo'),
bar: jest.fn(() => 'mocked bar'),
baz: jest.fn(() => 'mocked baz'),
}))
describe('util', () => {
//...
})
Run Code Online (Sandbox Code Playgroud)
在我的组件上,当我调用foo()或bar()时baz(),我收到了undefined. jest.fn()但如果我像这样删除一切都会正常:
jest.mock('./util', () => ({
__esModule: true,
default: () => 'mocked foo',
bar: () => 'mocked bar',
baz: () => 'mocked baz',
}))
Run Code Online (Sandbox Code Playgroud)
我的示例非常接近 jest 文档上的示例: https ://jestjs.io/docs/mock-functions#mocking-partials
我正在使用React (CRA) 和TypeScript
我知道模拟模块有不同的方法,但我很想了解我面临的问题。
知道我做错了什么吗?:) 谢谢 !
小智 23
我遇到了同样的问题(也在运行 CRA),发现这可能是原因:
https://github.com/facebook/jest/issues/9131#issuecomment-668790615
有点晚了,但我只是遇到了这个问题。我发现有人添加
resetMocks: true到该jest.config.js文件中。这意味着模拟函数的实现在每次测试之前都会重置。因此,在我们的例子中,模拟函数在测试运行时被包含在模拟模块中,但该模拟已被重置,因此它返回未定义。关于最初的问题构建环境,看起来react-scripts确实添加到了
resetMocks: truejest配置中。(https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js#L69)但是您可以在包的 jest 键上覆盖它。 json。(https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js#L74)
| 归档时间: |
|
| 查看次数: |
8692 次 |
| 最近记录: |