當我測試反應組分時,最佳實踐是什麼以及我應該測試什麼樣的東西?在正常測試中,我通常只是測試正確的狀態+輸入是否導致正確的狀態+輸出如何正確地單元測試一個React組件?
但是React組件有點不同。他們有狀態+道具+用戶輸入,導致狀態+標記。
這可能會導致許多不同的潛在情景。我是否需要測試所有這些場景的結果狀態? 標記可能很大。我應該測試整個標記樹是否如預期的那樣?或者只是其中的一部分?我如何確定要測試的標記的哪一部分?
當我測試反應組分時,最佳實踐是什麼以及我應該測試什麼樣的東西?在正常測試中,我通常只是測試正確的狀態+輸入是否導致正確的狀態+輸出如何正確地單元測試一個React組件?
但是React組件有點不同。他們有狀態+道具+用戶輸入,導致狀態+標記。
這可能會導致許多不同的潛在情景。我是否需要測試所有這些場景的結果狀態? 標記可能很大。我應該測試整個標記樹是否如預期的那樣?或者只是其中的一部分?我如何確定要測試的標記的哪一部分?
第一個明顯的事情要記住:
關於組成部分,始終測試:
如果您不確定使用什麼庫來測試React組件,我強烈建議Enzyme。從他們的GitHub頁面
例子:
describe('<MyComponent />',() => {
it('renders three <Foo /> components',() => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.find(Foo)).to.have.length(3);
});
it('renders an `.icon-star`',() => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.find('.icon-star')).to.have.length(1);
});
it('renders children when passed in',() => {
const wrapper = shallow(
<MyComponent>
<div className="unique" />
</MyComponent>
);
expect(wrapper.contains(<div className="unique" />)).to.equal(true);
});
it('simulates click events',() => {
const onButtonClick = sinon.spy();
const wrapper = shallow(
<Foo onButtonClick={onButtonClick} />
);
wrapper.find('button').simulate('click');
expect(onButtonClick).to.have.property('callCount', 1);
});
});
那麼你如何準確地測試HTML?你測試每個節點是否在那裏?或者只是關鍵節點? – MoeSattler
@Moezalez哦,我絕對只找關鍵節點。否則,這將是不可行的。 :)。例如,如果要測試單擊下拉按鈕是否實際打開下拉列表,通常查找1或2個關鍵元素應該足夠。測試是重要的,但是完成任務甚至更重要。 –
這不是回答的問題,但在大多數情況下,組件標記不應該是巨大的。在我看來,最好將小組件上的大型組件拆分爲小標記。這樣,您可以輕鬆測試它們。 – 1ven