【发布时间】:2021-03-14 09:53:46
【问题描述】:
我有一个 CRA 应用程序并尝试使用 Jest 的 manual mocks 功能,但我的手动模拟似乎没有应用。
我使用src 的基本网址(通过将其设置为tsconfig.json)。简化,我有并且有一个文件结构
src/
|- components/
|-- Foo/
|--- index.js
|--- Foo.jsx
|- App.js
|- App.test.js
其中App.js 使用import Foo from "components/Foo"。在App.test.js 中,我希望Foo 被嘲笑(它的计算量很大并且在单元测试中经过测试)。所以在我的测试中,我添加了jest.mock("components/Foo"),并在我绝望中添加了几个__mocks__ 文件夹,例如
__mocks__
|- components\
|-- Foo.jsx
src/
|- __mocks__/
|-- components/
|--- Foo.jsx
|- components/
|-- Foo/
|--- __mocks__
|---- Foo.js
|--- index.js
|--- Foo.jsx
|- App.js
|- App.test.js
每个手动模拟包含的位置
console.log("Mock imported");
export default function MyMock(){
console.log("Mock used");
return <p />;
}
但是,在运行测试时,没有来自模拟的控制台打印输出,虽然 Foo 被分配了一个空模拟,但它没有使用预期的手动模拟。
我做错了什么?
【问题讨论】:
-
你也可以分享测试文件吗?另外,只要确保您在
jest.mock()中有相对路径,对吗?喜欢import SoundPlayer from './sound-player'; jest.mock('./sound-player'); // SoundPlayer is now a mock constructor -
不,我在
App.js和App.test.js中都使用绝对路径。这可能是导致问题的原因吗?使用相对路径很困难,因为我正在处理一个非常大的应用程序
标签: reactjs jestjs mocking create-react-app