ReactNative 0.48 中 Jest 错误 "Cannot read property 'validAttributes' of undefined"

3

我们有一个应用程序,最近从ReactNative 0.42升级到0.48。在这次更新中,我们将测试迁移到了Jest(从mocha / chai / enzyme)。我们当前使用的是Jest v21.1.0。当我手动运行每个测试时,它们都能通过而没有错误。但当我只运行yarn jest时,就会出现以下错误:

/scratch/react_native_app/client/node_modules/react-native/Libraries/Renderer/ReactNativeStack-dev.js:2582
warnForStyleProps$1(nativeProps,viewConfig.validAttributes);
                                          ^

TypeError: Cannot read property 'validAttributes' of undefined
    at setNativePropsStack$1 (/scratch/react_native_app/client/node_modules/react-native/Libraries/Renderer/ReactNativeStack-dev.js:2582:43)
    at Component.setNativeProps (/scratch/react_native_app/client/node_modules/react-native/Libraries/Renderer/ReactNativeStack-dev.js:2550:1)
    at AnimatedProps.callback [as _callback] (/scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:1819:20)
    at AnimatedProps.update (/scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:1698:6)
    at /scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:230:69
    at Set.forEach (native)
    at _flush (/scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:230:16)
    at AnimatedValue._updateValue (/scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:939:1)
    at TimingAnimation.animation.start._this9._animation [as _onUpdate] (/scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:906:8)
    at TimingAnimation.onUpdate (/scratch/react_native_app/client/node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js:345:6)

我不能确定,但我们只有两个与动画和时间相关的组件。我们正在使用jest.useFakeTimers();如果我添加一个jest.runAllTimers();,我可以在单个组件上获得错误。组件的时间部分看起来像这样:

  componentDidMount() {
      Animated.timing(
        this.state.fadeAnim, {
          toValue: 1,
          delay: 2000
        }
      ).start();
  }

并且
<Animated.View style={{ opacity: this.state.fadeAnim }}>
 ...
</Animated.View>

我有同样的问题,甚至更令人困惑的是:如果单独运行(每个文件),测试都是成功的。当我运行 npm run jest 时,就会出现这个错误。 - pietro909
@pietro909,我上周晚些时候才弄明白了这个问题。请看下面的答案。 - DaKaZ
1个回答

1
我花了相当长的时间,但最终弄清楚了发生了什么。基本上,我的测试中渲染动画视图的比我想象的要多。我最初在组件的特定测试中包含了jest.useFakeTimers();,但随后将其移动到名为test/jest_setup.js的设置文件中,并将其添加到了我的package.json文件中:
  "jest": {
    "setupFiles": [
      "./node_modules/react-native/jest/setup.js",
      "./test/jest_setup.js"
    ],
    // rest of jest config
  }

现在我的错误已经消失了!

解决方案不起作用。顺便问一下,jest.useFakeTimers() 和 test/jest_setup.js 中包含的 jest.useFakeTimers() 有什么区别? - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接