2016-08-07 3 views
1

Когда я тестирую реагирующий компонент, каковы наилучшие практики и на что мне нужно проверять? В обычных тестах я обычно просто проверяю, правильное ли состояние + вход приводит к правильному состоянию + выходКак правильно протестировать компонент React?

Но компоненты React немного отличаются. У них есть состояние + реквизит + userInput, которые приводят к состоянию + разметка.

Это может привести ко многим и многим потенциальным сценариям. Нужно ли проверять состояние всех этих сценариев? Разметка может быть огромной. Должен ли я проверить, соответствует ли вся разметка? Или просто его часть? Как определить, какую часть разметки нужно проверить?

+1

Это не ответить на вопрос, но в большинстве случаев компонента разметка не должна быть огромной. На мой взгляд, было бы лучше разделить большие компоненты на небольшие компоненты с небольшой разметкой. Таким образом, вы можете легко их протестировать. – 1ven

ответ

2

Первые очевидные вещи, которые нужно иметь в виду:

  • Если логика ваших компонентов может быть воплощен в модули и испытаны независимо друг от друга, то сделайте это. Пример. Для компонента калькулятора сами вычисления могут быть протестированы независимо от компонента. Я знаю, что это очевидно, но просто чтобы сказать суть.
  • Разделите свои компоненты на более мелкие и тщательно проверьте каждый из них.

Что касается компоненты, всегда теста:

  • Если правильный реквизит будет оказывать правильный вывод (HTML).
  • Если правильное взаимодействие с пользователем (щелчок, нажатие клавиш ...) приведет к соответствующим событиям и приведет к правильному выходу (HTML). Обычно я не занимаюсь состоянием компонентов во время модульных тестов, так как я не считаю это хорошей практикой. Для тестирования телевизора вам не нужно открывать его.

Если вы не уверены в том, какую библиотеку использовать для тестирования компонентов 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); 
    }); 
}); 
+0

Итак, как вы точно тестируете HTML? Вы проверяете, есть ли каждый узел? Или просто ключевые узлы? – MoeSattler

+0

@Moezalez О, я определенно ищу только ключевые узлы. В противном случае это было бы невозможно. :). Например, если вы хотите проверить, действительно ли нажатие кнопки раскрывающегося списка открывает раскрывающийся список, обычно требуется 1 или 2 ключевых элемента. Тестирование важно, но делать что-то еще важнее ИМХО. –

Смежные вопросы