Я сгенерировал компонент в своей папке компонентов, используя angular CLI (v6.1.4), запустив ng g c components/foo, а затем запустил ng test. Тест нового компонента не проходит из-за следующих ошибок:
Zone is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/zone.js thrown
Error: Illegal state: Could not load the summary for directive FooComponent.
Как ни странно, если я запускаю ng g c foo (т.е. он не создается в папке компонентов), тест проходит. Все мои тесты работают для других папок, но это первый тест в моей папке компонентов (а также первый тест для компонента). Ни один из других тестов не является асинхронным.
Я новичок в ng test, поэтому мне может не хватать чего-то очень очевидного. Я не ожидал, что мне понадобится настраивать что-либо с zone.js для запуска теста по умолчанию. Где мне это настроить? Или мне здесь чего-то не хватает, возможно, чего-то особенного для моей папки components?





Добавление следующего кода в начало foo.component.spec.ts устранило проблему, но я до сих пор не понимаю, почему тесты работали, если их не было в папке components. Если у кого-то есть объяснение или решение, которое не предполагает повторения этого в тестовом файле каждого компонента, я бы хотел его услышать!
import 'zone.js';
import 'zone.js/dist/async-test.js';
import 'zone.js/dist/proxy.js';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
В моем случае здесь я задавался вопросом, мог ли мой проект быть сгенерирован с другой версией основной тестовой конфигурации, поэтому я создал новый пустой проект с Angular CLI, сравнил обе версии src/test.ts и понял, что этот файл действительно был другим, в моем приложении отсутствовала следующая строка в качестве первой:
import 'zone.js/dist/zone-testing'
После добавления в файл src/test.ts эта ошибка исчезла!
Вероятно, это лучше, чем импортировать все эти файлы js во все спецификации, как предлагает ответ Тима.
@ Тим, вы пробовали сравнить свой тест с недавно созданным приложением angular?
В моем случае эта строка также была в test.ts, но это была не первая строка. Я переместил его полностью вверх, и теперь тесты проходят нормально. Спасибо, @BrunoJCM!
В дополнение к @BrunoJCMкомментарий выше, который решил мою проблему, организовав импорт в файл test.ts, имейте в виду, что следующие настройки в вашем проекте могут заставить вас снова столкнуться с проблемой, поэтому относительно файла test.ts проверьте следующее:
Наслаждайтесь программированием без проблем! : D
Спасибо, Бруно. В моем случае эта строка уже находится в
src/test.ts, и если я удалю 5 импортированных из тестового файла, тесты снова прервутся. К сожалению, мне так и не удалось разобраться в этой проблеме.