Ошибка: инвариантное нарушение: findAllInRenderedTree (...): экземпляр должен быть составным компонентом

При написании тестового примера в JEST для файла React я получаю эту ошибку. Ниже приведен пример кода:

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>
}

Кто-нибудь там, чтобы помочь мне в этом?

Ответ 1

Компонентный компонент - это компонент, содержащий компонент React (не div, span,...) Метод findRenderedDOMComponentWithTag принимает параметр составной компонент.

Попробуйте разобрать компонент непосредственно в вашем случае (jquery, js,...), потому что он не является составным.

Ответ 2

Это поздно, но я просто столкнулся с этим, и я не нашел для него отличного ответа.

Мое решение состояло в том, чтобы сделать компонент оболочки в тестовом файле

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

и вместо вызова

TestUtils.renderIntoDocument(
    <YourComponent />
);

вызов

TestUtils.renderIntoDocument(
    <Wrapper />
);

Выполнение этого гарантирует, что ваш компонент является составным компонентом и не является функцией без состояния.

Надеюсь, это поможет кому-то еще в будущем!