Я следую этому руководству: http://reactkungfu.com/2015/07/approaches-to-testing-react-components-an-overview/
Попытка узнать, как работает "мелкий рендеринг".
У меня есть компонент более высокого порядка:
import React from 'react';
function withMUI(ComposedComponent) {
return class withMUI {
render() {
return <ComposedComponent {...this.props}/>;
}
};
}
и компонент:
@withMUI
class PlayerProfile extends React.Component {
render() {
const { name, avatar } = this.props;
return (
<div className="player-profile">
<div className='profile-name'>{name}</div>
<div>
<Avatar src={avatar}/>
</div>
</div>
);
}
}
и тест:
describe('PlayerProfile component - testing with shallow rendering', () => {
beforeEach(function() {
let {TestUtils} = React.addons;
this.TestUtils = TestUtils;
this.renderer = TestUtils.createRenderer();
this.renderer.render(<PlayerProfile name='user'
avatar='avatar'/>);
});
it('renders an Avatar', function() {
let result = this.renderer.getRenderOutput();
console.log(result);
expect(result.type).to.equal(PlayerProfile);
});
});
Переменная result
имеет значение this.renderer.getRenderOutput()
В учебнике result.type
проверяется следующим образом:
expect(result.type).toEqual('div');
в моем случае, если я запишу в журнал result
, это:
LOG: Object{type: function PlayerProfile() {..}, .. }
поэтому я изменил свой тест следующим образом:
expect(result.type).toEqual(PlayerProfile)
теперь он дает мне эту ошибку:
Assertion Error: expected [Function: PlayerProfile] to equal [Function: withMUI]
Так что PlayerProfile
type - это функция более высокого порядка withMUI
.
PlayerProfile
, украшенный withMUI
, используя мелкую визуализацию, отображается только компонент PlayerProfile
, а не он. Так что мелкий рендеринг не будет работать с декорированными компонентами, которые я предполагаю.
Мой вопрос:
Почему в учебнике result.type
ожидается div, но в моем случае это не так.
Как я могу протестировать компонент React, украшенный компонентом более высокого порядка, используя мелкий рендеринг?