Zgodnie z dokumentacją Enzyme :
mount(<Component />)
for Full DOM Renderowanie jest idealne do przypadków użycia, w których masz komponenty, które mogą współdziałać z DOM apis lub mogą wymagać pełnego cyklu życia, aby w pełni przetestować komponent (np. componentDidMount itp.)
vs.
shallow(<Component />)
do renderowania płytkiego jest przydatne, aby ograniczyć się do testowania komponentu jako jednostki i upewnić się, że testy nie potwierdzają pośrednio zachowania komponentów potomnych.
vs.
render
który jest używany do renderowania komponentów reagujących na statyczny kod HTML i analizowania wynikowej struktury HTML.
Nadal możesz zobaczyć bazowe "węzły" w płytkim renderowaniu, więc na przykład możesz zrobić coś takiego (nieco wymyślny) przykład używając AVA jako elementu uruchamiającego specyfikację:
let wrapper = shallow(<TagBox />);
const props = {
toggleValue: sinon.spy()
};
test('it should render two top level nodes', t => {
t.is(wrapper.children().length, 2);
});
test('it should safely set all props and still render two nodes', t => {
wrapper.setProps({...props});
t.is(wrapper.children().length, 2);
});
test('it should call toggleValue when an x class is clicked', t => {
wrapper.setProps({...props});
wrapper.find('.x').last().simulate('click');
t.true(props.toggleValue.calledWith(3));
});
Zwróć uwagę, że renderowanie , ustawianie rekwizytów i znajdowanie selektorów, a nawet zdarzeń syntetycznych są obsługiwane przez płytkie renderowanie, więc w większości przypadków możesz po prostu tego użyć.
Ale nie będziesz w stanie uzyskać pełnego cyklu życia komponentu, więc jeśli spodziewasz się, że coś się wydarzy w componentDidMount, powinieneś użyć mount(<Component />)
;
Ten test wykorzystuje Sinon do szpiegowania komponentucomponentDidMount
test.only('mount calls componentDidMount', t => {
class Test extends Component {
constructor (props) {
super(props);
}
componentDidMount() {
console.log('componentDidMount!');
}
render () {
return (
<div />
);
}
};
const componentDidMount = sinon.spy(Test.prototype, 'componentDidMount');
const wrapper = mount(<Test />);
t.true(componentDidMount.calledOnce);
componentDidMount.restore();
});
Powyższe nie przejdzie przy płytkim renderowaniu lub renderowaniu
render
udostępni tylko kod HTML, więc nadal możesz robić takie rzeczy:
test.only('render works', t => {
const rendered = render(<Test />);
const len = rendered.find('div').length;
t.is(len, 1);
});
mam nadzieję że to pomoże!