2016-09-01 11 views
0

反応ネイティブ0.30アプリをJest 14.1.0から15.1.0にアップグレードした後、私のテストのほとんど(すべてではない)でのエラー:Jest 14 - > 15アップグレード:要素タイプが無効です:文字列またはクラス/関数が必要ですが、未定義です

Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.                             

    at invariant (node_modules/fbjs/lib/invariant.js:38:15)                                                     
    at instantiateReactComponent [as _instantiateReactComponent] (node_modules/react/lib/instantiateReactComponent.js:86:134)                                     
    at ReactCompositeComponentMixin.performInitialMount (node_modules/react/lib/ReactCompositeComponent.js:358:22)                                        
    at ReactCompositeComponentMixin.mountComponent (node_modules/react/lib/ReactCompositeComponent.js:241:21)                                         
    at Object.ReactReconciler.mountComponent (node_modules/react/lib/ReactReconciler.js:49:35)                                             
    at ReactCompositeComponentMixin.performInitialMount (node_modules/react/lib/ReactCompositeComponent.js:367:34)                                        
    at ReactCompositeComponentMixin.mountComponent (node_modules/react/lib/ReactCompositeComponent.js:241:21)                                         
    at Object.ReactReconciler.mountComponent (node_modules/react/lib/ReactReconciler.js:49:35)                                             
    at ReactCompositeComponentMixin.performInitialMount (node_modules/react/lib/ReactCompositeComponent.js:367:34)                                        
    at ReactCompositeComponentMixin.mountComponent (node_modules/react/lib/ReactCompositeComponent.js:241:21)                                         
    at Object.ReactReconciler.mountComponent (node_modules/react/lib/ReactReconciler.js:49:35)                                             
    at mountComponentIntoNode (node_modules/react/lib/ReactTestMount.js:47:31)                                                 
    at ReactTestReconcileTransaction.Mixin.perform (node_modules/react/lib/Transaction.js:138:20)                                            
    at batchedMountComponentIntoNode (node_modules/react/lib/ReactTestMount.js:61:27)                                               
    at ReactDefaultBatchingStrategyTransaction.Mixin.perform (node_modules/react/lib/Transaction.js:138:20)                                         
    at Object.ReactDefaultBatchingStrategy.batchedUpdates (node_modules/react/lib/ReactDefaultBatchingStrategy.js:63:19) 

これらはreact-test-rendererを使用して、すべてのテストであり、一般的に次のようになります。

import 'react-native' 
import React from 'react' 
import Foo from '../Foo' 

// Note: test renderer must be required after react-native. 
import renderer from 'react-test-renderer' 

describe('<Foo />',() => { 
    it('renders correctly',() => { 
    const tree = renderer.create(
     <Foo loading={false} dispatch={() => {}} /> 
    ).toJSON() 
    expect(tree).toMatchSnapshot() 
    }) 
}) 

このまったく同じテストファイルは私のコンポーネントの1のために働きます私の他のコンポーネントのほとんどを試してみると失敗します。これらのテストはすべてJest 14.1.0で正しく動作します。

エラーメッセージはあまり説明的ではありません。あなたは何が起こっているかも知っていますか?

答えて

0

問題はbabel-plugin-rewireの使用であることが判明しました。その解決策は、私たちがモカのための再配線のみを可能にし、冗談ではないことを確実にすることでした。私たちの.babelrcで

は、我々はmochatesttestを変更:我々のテストランナーで

{ 
    "presets": ["react-native"], 
    "env": { 
    "mochatest": { 
     "plugins": ["babel-plugin-rewire"] 
    } 
    } 
} 

、我々はモカとない冗談を呼び出す前にのみmochatestするBABEL_ENVを設定してください。

export BABEL_ENV="mochatest" && mocha && export BABEL_ENV="jesttest" && jest