Стратегии тестирования при разработке избыточных хранилищ в угловых приложениях, управляемых тестами

Обычно я разрабатываю угловые приложения, управляемые тестами.
Это работает хорошо, но при использовании redux в моих проектах (в настоящее время ngrx, но также и angular/redux) есть несколько различных аспектов, которые следует учитывать при тестировании и разработке магазинов и функций/ фрактальные магазины, управляемые тестами.

Намереваться

Проблема заключается в том, чтобы найти хорошую стратегию для тестирования и разработки на основе тестов.

Есть e2e-тесты, интеграционные тесты и модульные тесты, где последние в основном тестируют статические функции и статические реактивные переменные в этом контексте.

Моя главная цель — провести разработку с помощью тестов, начиная с уровня интеграции магазинов и подмагазинов и заканчивая отдельными компонентами магазинов.

Я хочу иметь возможность изначально разрабатывать магазин без интеграции в остальную часть углового приложения.

Таким образом, сценарии, в которых переход от управления данными без избыточности или переход с одной фреймворка избыточности на другую, могут быть выполнены гладко без большого взрыва.

Различные взгляды и стратегии

Я пробовал разные стратегии с разных точек зрения.

Относитесь к редюсерам, эффектам, селекторам и создателям действий как к целостному хранилищу

Когда мы рассматриваем редукторы, эффекты, селекторы и создатели действий как просто внешние функции и переменные целостных хранилищ, достаточно протестировать их, интегрированные в инкапсулирующие хранилища.

техническая функциональность магазина указана в целом

магазины явно тестируются как один интегрированный компонент, поэтому их функциональность не просто проверяется в e2e-тестах

прямые и побочные эффекты действий указываются в одном месте.

инкапсуляция в хранилище только фиктивна. На практике нет явного класса для каждого хранилища, есть только один большой объект хранилища.

это очень объектно-ориентированная перспектива в более функциональном мире

может привести к созданию очень полных наборов интеграционных тестов

никаких «настоящих» юнит-тестов

Относитесь к редьюсерам, эффектам, селекторам и создателям действий строго как к отдельным компонентам, которые тестируются изолированно.

Мы рассматриваем редукторы, эффекты, селекторы и создатели действий как отдельные и полностью независимые компоненты и тестируем их изолированно.

небольшие компактные наборы тестов, ориентированные на соответствующие функции и реактивные переменные

влияние действий указано отдельно для ответственности различных компонентов

реальные модульные тесты

взаимодействие различных компонентов только что проверено в e2e-тестах

Спецификация воздействия действий распределена по нескольким наборам тестов

высокая сплоченность компонентов магазина видна только в файловой структуре и их конфигурации в модулях ng.

Относитесь к редюсерам, эффектам, селекторам и создателям действий как к отдельным компонентам, которые тестируются отдельно, но интегрированы.

Мы относимся к редюсерам, эффектам, селекторам и создателям действий как к отдельным компонентам, тестируем их тоже отдельно, но интегрированно в сторах.

небольшие, бережливые тесты, фокусирующиеся на соответствующих функциях и реактивных переменных

влияние действий определяется отдельно от ответственности различных компонентов

компоненты магазинов тестируются комплексно, поэтому их работоспособность не просто проверяется в e2e-тестах

принадлежность к конкретному магазину также видна в интеграционных тестах

Спецификация воздействия действий распределена по нескольким спецификациям

при первом взгляде на название спецификации кажется, что это модульные тесты, но это интеграционные тесты

никаких «настоящих» юнит-тестов

Вывод

Сначала я начал с сочетания первого и второго подходов, но вскоре избыточность между интеграционным тестом магазина и тестами его отдельных компонентов заставила меня остановиться и переосмыслить свою точку зрения и этот подход.

Моя вторая мысль заключалась в том, чтобы относиться к компонентам хранилищ как к аутсорсинговым функциям и реактивным переменным и больше тестировать их только инкапсулированными в интеграционных тестах.

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

Кроме того, из-за того, что тесты структурированы во вложенных костюмах для каждого действия, результаты тестов также были действительно хорошими. Я сразу увидел, какие эффекты и побочные эффекты вызывает каждое действие.

Но, по крайней мере, когда я расширил магазин несколькими различными видами побочных эффектов, интеграционный тест стал слишком большим.

Итак, я остановился на последнем подходе, который, наконец, показался мне хорошим компромиссом между его плюсами и минусами для осмысленного тестирования функций/фрактальных хранилищ.

Буду очень рад прочитать о ваших мнениях и подходах к этому вопросу.

Первоначально опубликовано на сайте maimart.de 24 июля 2018 г.