Jest并不总是能模拟嘲笑的React Native模块

时间:2020-01-04 18:25:50

标签: unit-testing react-native jestjs

一个模拟库存在一个奇怪的问题,该库有时会返回模拟,有时却不会。这是我在做什么:

我在项目根目录下的 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导入神奇地找到了它。发生了什么事?

0 个答案:

没有答案