
Eugene Y.
07.12.2017
21:26:38
Я все сломал(
Теперь не билдится

Stepan
07.12.2017
21:26:58
Попробуй с ним, хоть разберёшься, как там всё работает

Dmitry
07.12.2017
21:27:59
Доброй ночи

Google

Dmitry
07.12.2017
21:28:08
Посоветуйте react+redux проект, покрытый юнит тестами
Хочу сорцы почитать, посмотреть как тестят
То что в оф. доке - https://redux.js.org/docs/recipes/WritingTests.html#reducers - совсем вырожденный и простой случай
Вообще сложилось впечатление что на реакт-стеке максимум интеграционные тесты (по желанию со скриншотами) можно писать
Слишком много мокать надо для юнит-тестов

Сергей
07.12.2017
21:39:22
ну для редюсеров совсем немного, но да, моки нужны
без юнит тестов жить совсем больно
интеграционные проверяют только юзер-кейсы
а сам по себе код нет
хоть там 100К ошибок будет в консоли и производительность низкая

Dmitry
07.12.2017
21:49:59
Хорошо, положим я тестирую отдельный редьюсер - на входе i кусочков стейта “до”, k экшенов и j наборов payload для этих экшенов. Прогонов будет i*j*k, на выходе кусочек стейта “после”. Его надо проверить. Как? Варианты:
1 Нагенерить i*j*k кол-во вариантов стейта и тупо сверить
2 Написать просто валидатор на откровенную лажу. Саму логику не проверяем
3 Еще какие? …
Вариант с дублированием логики редьюсера в юнит-тесте кажется совсем бессмысленным

Winni
07.12.2017
21:58:44
jest?

Сергей
07.12.2017
21:58:49
https://developers.google.com/web/updates/2017/10/devtools-release-notes#workspaces

Dmitry
07.12.2017
21:59:21
Это инструмент. Хороший. Меня сам подход интересует. И практические примеры, чуть посложнее тестирования TODO List

Winni
07.12.2017
21:59:40
it('should return correct range', () => {
expect(
reducer({statebefore})
).toEqual(
{stateAfter}
)
});

Dmitry
07.12.2017
21:59:57
В доке стейт из трех полей и два экшена без параметров.

Google

Dmitry
07.12.2017
22:01:25
‘should return correct value' тогда уж. Не вижу тут range
Либо делать родительский тест который весь range в цикле проверит
Используя нагенеренные куски стейта
Пишу тест, нагенерил сотню тысяч этих stateAfter на все случаи жизни, закоммитил.
Чуть-чуть изменилась логика или вообще рефакторинг имен полей.
Тест переписал, перегенерил заново эту сотню тысяч stateAfter, закоммитил.
???
Так что-ли

Stepan
07.12.2017
22:10:00

Dmitry
07.12.2017
22:13:29

Sergey
07.12.2017
22:43:27
Я на каждый тест с начала прогоняю экшены через рюдесер что бы добиться того стейта на который собственно и пишу тест.
Но у меня экшенов всего десятка полтора.

Dmitry
07.12.2017
22:51:05
А payload у этих экшенов какой? Если прогонять их как юзер (нажимать кнопки, вводить текст и иная другая input-реакция), то на результат влияют и компоненты, к которым привязан action creator. Изменился компонент -> в AC может попасть неоттестированное значение -> непокрытый тестами кейс
У “прогоночных” экшенов имеется в виду

Sergey
07.12.2017
22:54:22
У меня такого не может быть. То с чем работает пользователь напрямую зависит от стейта.
Но там и возможностей у пользователя сильно меньше. Нет форм (вернее одна всё-таки есть) нет мышки и всего 20 кнопок на «клавиатуре»

Dmitry
07.12.2017
22:56:17
Все же у тебя наверное больше интеграционный тест получается, а не юнит
Связка стор-компонент-AC-редьюсер

Admin
ERROR: S client not available

Sergey
07.12.2017
22:57:06
Экшн - редюсер - селектор

Дмитрий
07.12.2017
22:58:27
Отец, сын и святой дух

Sergey
07.12.2017
22:58:39
))

Дмитрий
07.12.2017
23:01:25
Если вебпак неправильно транспилирует в продакшн режиме мои компоненты-генераторы, то это к психиатрам, да?

Sergey
07.12.2017
23:03:00
У меня недавно было что-то подобное. Дев сборка работает. Продакшн сборка роняет хром.

Google

Stepan
07.12.2017
23:03:24

Sergey
07.12.2017
23:04:05
Причём если в продакшн сборке поставить брейкпоинт в том месте где все падает. То оно не падает.
Бился до трёх утра. Потом забил и лёг спать. На утро само рассосалось.
До сих пор мучает меня вопрос - не приснилось ли мне это все.

Stepan
07.12.2017
23:05:35
Это был ночной кошмар

Dmitry
07.12.2017
23:05:58
Просто выключаешь плагины по одному в конфиге вебпака и ищешь кто виноват

Дмитрий
07.12.2017
23:06:58
Это те самые?)
Те самые ломают бабель в другом месте ?А
это я просто решил воспользоваться итераторами по назначению))
То есть для реакта реально нормально иметь в children
function* IterableComp() {
yield <A/>
yield <B/>
}

Sergey
07.12.2017
23:08:48

Dmitry
07.12.2017
23:09:07
У меня были случаи когда я находил свой issue в числе закрытых на гитхабе плагина. Т.е. официально все должно было работать, а те кто раньше жаловался - их поиском не было видно