3

尝试在 Jest 中呈现我的应用程序以进行一些集成测试时,我收到以下错误:

    TypeError: Cannot read property 'createNode' of undefined

      at AnimatedParam.createNode [as __nativeInitialize] (node_modules/react-native-reanimated/src/core/AnimatedNode.js:126:24)
      at AnimatedParam.__nativeInitialize [as __attach] (node_modules/react-native-reanimated/src/core/AnimatedNode.js:71:10)
      at new __attach (node_modules/react-native-reanimated/src/core/AnimatedParam.js:11:10)
      at createAnimatedParam (node_modules/react-native-reanimated/src/core/AnimatedParam.js:71:10)
      at createAnimatedFunction (node_modules/react-native-reanimated/src/core/AnimatedFunction.js:38:17)
      at Object.<anonymous> (node_modules/react-native-reanimated/src/derived/interpolate.js:17:39)

它抱怨的代码react-native-reanimated如下所示:

  __nativeInitialize() {
    if (!this.__initialized) {
      ReanimatedModule.createNode(this.__nodeID, { ...this.__nodeConfig });
      this.__initialized = true;
    }
  }

并且是库中的ReanimatedModule类型别名。除此之外,我还没有找到任何有助于解决此问题的有用信息。NativeModulereact-native

这里特别奇怪的是,我没有直接react-native-reanimated在我的代码库中使用,据我所知,我能找到的唯一使用它的库组件并没有在被测试的组件中呈现。

我无法以任何合理的方式精简我的代码来重现此问题,并且有问题的代码受公司版权保护,因此我无法共享存储库。我将继续尝试在一个小示例中重现该错误,但我想提出这个问题,以防有人对这个问题有任何经验。

4

3 回答 3

3

我也遇到了这个。

我最终需要用这样的代码来模拟整个复活的模块:

jest.mock('react-native-reanimated', () => {
  const View = require('react-native').View;

  return {
    Value: jest.fn(),
    event: jest.fn(),
    add: jest.fn(),
    eq: jest.fn(),
    set: jest.fn(),
    cond: jest.fn(),
    interpolate: jest.fn(),
    View: View,
    Extrapolate: { CLAMP: jest.fn() },
    Transition: {
      Together: 'Together',
      Out: 'Out',
      In: 'In',
    },
  };
});

我在一个/spec_config/jest.js文件中有这个,它在我的文件中使用以下行加载(以及其他一些全局模拟)jest.config.jssetupFilesAfterEnv: ['./spec_config/jest.js'],

对我来说似乎是一团糟,但我想这就是这个世界的方式。(h/t 这个 GitHub 问题:https ://github.com/software-mansion/react-native-reanimated/issues/205 )

于 2020-04-07T15:50:08.057 回答
1

如果您需要模拟react-native-reanimated,则不必手动进行,因为他们现在在模块本身中提供了模拟。

简单地将这一行添加到您的jest.setup.js文件中:

jest.mock('react-native-reanimated', () =>
  require('react-native-reanimated/mock')
);

这个 PR 已经介绍了这一点:https ://github.com/software-mansion/react-native-reanimated/pull/276/files#diff-1377ba307a14fcbe31e128f4753b73301a43967a417c744f144f9ae5d77f67d5R7

于 2021-01-27T12:09:10.760 回答
0

问题在于 react-native-reanimated。按照 react-native-reanimated 文档中的过程进行操作。它现在应该可以正常工作了。如果没有,请尝试修复 react-native-gesture-handler ,如 react-native-gesture-handler 文档中所示。

于 2021-05-21T09:20:00.563 回答