Theo Enzyme docs:
mount(<Component />)
cho dựng hình Full DOM là lý tưởng cho các trường hợp sử dụng, nơi bạn có thành phần có thể tương tác với apis DOM, hoặc có thể yêu cầu toàn bộ vòng đời để kiểm tra đầy đủ các thành phần (ví dụ: , componentDidMount vv)
vs
shallow(<Component />)
cho render Shallow rất hữu ích để hạn chế bản thân để thử nghiệm một phần như một đơn vị, và để đảm bảo rằng các xét nghiệm của bạn không được gián tiếp khẳng định về hành vi của các thành phần con.
vs
render
được sử dụng để làm cho phản ứng linh kiện để HTML tĩnh và phân tích kết quả cấu trúc HTML.
Bạn vẫn có thể thấy tiềm ẩn "nút" trong một nông render, ví dụ như vậy, bạn có thể làm một cái gì đó như thế này (hơi giả tạo) ví dụ sử dụng AVA như Á hậu spec:
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));
});
ý rằng hiển thị, đạo cụ thiết lập và tìm bộ chọn và thậm chí sự kiện tổng hợp đều được hỗ trợ bởi hiển thị cạn, vì vậy hầu hết thời gian bạn chỉ có thể sử dụng.
Nhưng, bạn sẽ không thể có được toàn bộ vòng đời của thành phần, vì vậy nếu bạn mong đợi những điều xảy ra trong componentDidMount, bạn nên sử dụng mount(<Component />)
;
thử nghiệm này sử dụng Sinon để do thám của thành phần componentDidMount
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();
});
trên sẽ không vượt qua với nông render hoặc làm
render
sẽ cung cấp cho bạn với chỉ html, vì vậy bạn vẫn có thể làm những việc như sau:
test.only('render works', t => {
// insert Test component here...
const rendered = render(<Test />);
const len = rendered.find('div').length;
t.is(len, 1);
});
hy vọng điều này sẽ hữu ích!
Giải thích rõ ràng! –
tôi vẫn không nhận được 100%, tại sao ba động từ mang lại các phương pháp khác nhau với chúng. Ví dụ, người ta có thể sử dụng wrapper.getNode() ở nông nhưng không thể hiển thị. bất kỳ giải thích/liên kết/tài liệu/blog, mà giúp tôi nhận được togehter này? – Paulquappe
Trình diễn nào hiệu quả hơn? 'render' hoặc' nông'? –