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

Так много googling, и я наконец пришел к решению. Спасибо!! – randallreedjr