[React] Как готовить интеграционные тесты
От: VladCore  
Дата: 15.08.19 15:57
Оценка:
Вот есть у меня тест из коробки (из create-react-app):

import React from 'react';
import ReactDOM from 'react-dom';
import { MemoryRouter } from 'react-router-dom';
import App from './App';

it('default route renders without crashing', () => {
  const div1 = document.createElement('div');
  ReactDOM.render(
    <MemoryRouter>
      <App />
    </MemoryRouter>, div1);
});

он тестит только render и compomentDidMount дефолтого роутинга — он не падает.

дописал так:
for (let AnComponent of App.GetMenuComponents()) {
    const name = AnComponent.displayName || AnComponent.name;

    it(`RENDER {${name}}`, () => {
        console.log(`---===*** Component: [${name}], type: [${typeof AnComponent}] ***===--- `);
        const div2 = document.createElement('div');
        ReactDOM.render(<MemoryRouter><AnComponent/></MemoryRouter>, div2);
    });
}

стало лучше. тестируются тоже самое у всех компоненты, но череж одно место.

А как потестить обработку данных с web-api. Вот есть у меня живой WebAPI на http://localhost:5678/ и я знаю какие он данные шлет.
Надо в тесте для каждой заданной URL (одна урла на каждый роут)
1. дождаться пока загрузятся данные (данные приходят как из fetch в componentDidMount так и из WebSocket, который тоже создается в componentDidMount но сервер сначала тупит 0,5 секунды после создания соединенния и только потом отправляет, fetch понятно сразу получает ответ)
2. дождаться пока сработают "биндинги" полученных данных в приложении. Наверно это тоже самое что и 1, но если 1 упал то 2й не нужен.
3. захватить и вывести в консоль/лог все что в console
4. убедится что данные верные в DOM — это уже опционально.
5. А вот получить скриншот это я понимаю уже не все могут. Если что запустить headless хром не проблема.

В дальнейшем желательно как в Selenium возможность ввода данных в поля и нажатие кнопок. Но я хз зачем это лишнее.

Кто чем пользуется?
Вот тут их миллиард всяких: https://docs.travis-ci.com/user/gui-and-headless-browsers/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.