2017-04-10 19 views
1

'react-test-renderer'でコンポーネントをレンダリングしようとするとInvariant Violation: getNodeFromInstance: Invalid argument.と表示されます。 'react-addons-test-utils'.CreateRenderer().render()で正確に同じコンポーネントをレンダリングするとき、またはちょうど私のアプリを起動するとき、私は問題ありません。私は似たような問題について多くのことを読んできましたが、通常の答えは "あなたはReact loadedの複数のコピーを持っています"またはそれに類するものですが、すべてを試しました。不変違反:getNodeFromInstance:無効な引数

const result = renderer.create(
    (
     <ContextWrapper> 
     <Router history={browserHistory}> 
      <Navigation /> 
     </Router> 
     </ContextWrapper> 
    ), 
    document.createElement('div'), 
); 

ContextWrapperはちょうどmuiTheme(http://www.material-ui.com/を参照)とその子をラップします。

class ContextWrapper extends Component { 
    getChildContext() { 
    return { muiTheme: getMuiTheme() }; 
    } 

    render() { 
    return <div>{this.props.children}</div>; 
    } 
} 

マイNavigationが(これらすべてのコンポーネントは、材料-UIからです)AppBarを含み、AppBarと3倍のカスタムコンポーネント含むDrawer:ここ

<Link to={this.props.to}> 
    <MenuItem onTouchTap={() => this.handleTouchTap()} > 
    {this.props.label} 
    </MenuItem> 
</Link> 

は私の依存関係です:

"devDependencies": { 
    "babel": "^6.23.0", 
    "babel-jest": "^19.0.0", 
    "babel-preset-es2015": "^6.22.0", 
    "babel-preset-react": "^6.23.0", 
    "pre-commit": "^1.2.2", 
    "deep-freeze": "^0.0.1", 
    "eslint": "^3.15.0", 
    "eslint-config-airbnb": "^14.1.0", 
    "eslint-plugin-import": "^2.2.0", 
    "eslint-plugin-jsx-a11y": "^4.0.0", 
    "eslint-plugin-react": "^6.9.0" 
}, 
"dependencies": { 
    "express": "^4.15.2", 
    "material-ui": "latest", 
    "morgan": "^1.8.1", 
    "prop-types": "latest", 
    "react": "latest", 
    "react-bootstrap": "^0.30.8", 
    "react-dom": "latest", 
    "react-router-dom": "latest", 
    "react-scripts": "^0.9.5", 
    "react-tap-event-plugin": "^2.0.1", 
    "react-test-renderer": "latest" 
} 
+0

https://github.com/facebook/react/issues/8324 – elmeister

+0

ありがとう、私はすでにこの問題を見てきましたが、どこでもアプリケーションでfindDOMNodeを使用しません。 –

答えて

0

react-test-rendererでコンポーネントをレンダリングするには、coを作成するには1つの引数が必要ですmponent。あなたは怒鳴るこの例のように作成してコンポーネントをレンダリングしてみてください:

const result = renderer.create(
    (
     <ContextWrapper> 
     <Router history={browserHistory}> 
      <Navigation /> 
     </Router> 
     </ContextWrapper> 
    ) 
); 

Take a look here

私はあなたを助け願っています!

関連する問題