2015-12-23 49 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

相关问题