一个模拟库存在一个奇怪的问题,该库有时会返回模拟,有时却不会。这是我在做什么:
我在项目根目录下的 mocks 文件夹中嘲笑@react-native-community/google-signin
。
在项目根目录下,我还有一个带有单个测试文件(App.js)的 tests 文件夹
在我的src
文件夹中,我有两个组件(App.js和LoginComponent.js),它们都在src文件夹中,而不在任何子文件夹中。
我利用react-test-renderer
来渲染两个不同的组件:
it('renders correctly', () => {
const tree = renderer.create(
<App />
);
});
it('renders correctly', () => {
const tree = renderer.create(
<LoginComponent />
);
});
App
组件通过子组件间接引用@react-native-community/google-signin
。 (此子组件位于src / components / register中)
LoginComponent
组件直接引用@react-native-community/google-signin
。
现在,如果我以这种方式运行测试,则它们都将通过。但是,如果我禁用了<App/>
的测试并删除了app.js import语句,则我的<LoginComponent/>
测试将失败,因为它无法从@react-native-community/google-signin
中找到我正在嘲笑的某些属性。如果我记录了@react-native-community/google-signin
的模块导入,它将记录{default:{}}
,因此它是一个完全空的模拟,而不是我的手动模拟。
如果我随后仅在测试文件中添加了app.js的import语句而未启用app.js测试,则我对<LoginComponent />
的测试就通过了。
我很困惑。它以某种方式失去了对我的手动模拟的参考,只是给了我一个自动模拟,并且它通过App.js导入神奇地找到了它。发生了什么事?