2017-04-10 104 views
1

當我試圖渲染我的組件'react-test-renderer'時,我得到Invariant Violation: getNodeFromInstance: Invalid argument.。當與'react-addons-test-utils'.CreateRenderer().render()呈現完全相同的組件時,或剛啓動我的應用程序時,我沒有問題。我已經閱讀了很多類似的問題,通常的答案是「你有多個React加載副本」或類似的東西,但我嘗試了所有的東西,但是我無法使它正常工作。不變違規: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和3X定義組件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 mponent。你應該儘量使你的組件與創建這樣的例子波紋管:

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

Take a look here

我希望對您有幫助!