2015-12-23 56 views
11

在JEST中爲React文件編寫測試用例時,出現此錯誤。以下是我的示例代碼:錯誤:不變違規:findAllInRenderedTree(...):實例必須是複合組件

search_basr_test.js

jest.autoMockOff(); 
global.React = require('react/addons'); 
jest.setMock('../stores/browser_store.jsx'); 
beforeEach(function() { 
    var search_bar = require('../components/search_bar.jsx'); 
}); 
var TestUtils = React.addons.TestUtils; 

describe("Test", function() { 
    it("should render Test", function() { 
      var test = TestUtils.renderIntoDocument(<search_bar/>); 
      expect(test).toBeDefined(); 
    }); 
    it("renders a list in a box with proper CSS classes", function() { 
      var test = TestUtils.renderIntoDocument(<search_bar/>); 
      let box = TestUtils.findRenderedDOMComponentWithTag(test, "div"); 
      expect(box.className).toEqual("sidebar__collapse"); 
    }); 
}); 

search_bar.jsx

return (
     <div> 
      <div 
       className='sidebar__collapse' 
       onClick={this.handleClose} 
      > 
       <span className='fa fa-angle-left'></span> 
      </div> 
      <span 
       className='search__clear' 
       onClick={this.clearFocus} 
      > 
       {'Cancel'} 
      </span> 
} 

任何人在那裏幫助我從這個?

+0

同樣的問題,你解決了嗎? – novaline

回答

5

複合組件是包含React組件(不是div,span,...)的組件。 方法'findRenderedDOMComponentWithTag'接受參數中的複合組件。

嘗試直接解析組件在你的情況(jQuery的,JS,...),因爲它不是一個複合一個

4

這是晚了,但我只是碰到了這一點,我還沒有找到它是一個很好的答案。

我的解決辦法是使包裝部件的測試文件

import { Component } from "react"; 
class Wrapper extends Component { 
    render() { 
    return <YourComponent {...this.props} /> 
    } 
} 

和,而不是調用

TestUtils.renderIntoDocument(
    <YourComponent /> 
); 

呼叫

TestUtils.renderIntoDocument(
    <Wrapper /> 
); 

這樣做可以確保您的組件是複合組件,並且不是無狀態函數。

希望這可以幫助其他人在未來!

+0

這麼多Google搜索,我終於到了解決方案。謝謝!! – randallreedjr

相關問題