首页 > 解决方案 > 使用 Jest 测试 React Native 时如何模拟 LayoutAnimation

问题描述

我正在使用 Jest 和react-native-testing-library来测试我的组件。

在我的一个组件中,我有以下代码:

const handleToggleFilters = () => {
  LayoutAnimation.configureNext(LayoutAnimation.Presets.spring);
  setPostFiltersActive(!postFiltersActive);
};

但是,在测试我的组件时,出现以下错误

    TypeError: require(...).configureNextLayoutAnimation is not a function

      82 |
      83 |   const handleToggleFilters = () => {
    > 84 |     LayoutAnimation.configureNext(LayoutAnimation.Presets.spring);
         |                                  ^
      85 |     setPostFiltersActive(!postFiltersActive);
      86 |   };
      87 |

我添加jest.mock('react-native')到我的 setup.js 文件中,但它开始通过我的测试套件的其余部分抱怨其他丢失的实体......我是否必须模拟整个react-native库才能使其工作?

解决这个问题的最佳方法是什么?

标签: javascriptunit-testingreact-nativejestjs

解决方案


在查看了react-nativegithub 上的某些测试之后,看起来他们只是简单地模拟了文件本身。

// Libraries/Components/Keyboard/__tests__/Keyboard-test.js

jest.mock('../../../LayoutAnimation/LayoutAnimation');

所以在我的setup.js文件中我只是做了

jest.mock(
  '../node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js',
);

我的测试通过了。


推荐阅读