У меня есть проект Angular2, построенный с помощью Angular-CLI (beta 20).
Есть ли способ запустить тесты только для одного выбранного файла спецификации?
Раньше у меня был проект, основанный на быстром запуске Angular2, и я мог вручную добавлять спецификации в файл jasmine. Но я не знаю, как настроить это за пределами тестирования кармы или как ограничить тесты кармы конкретными файлами с помощью сборок Angular-CLI.
источник
fdescribe
илиxdescribe
? Я не хочу, чтобы неряшливый рецензент (я) слил PR, который пропускает все мои тесты.Настроить
test.ts
файл внутриsrc
папки:Замените
/\.spec\.ts$/
имя файла, который хотите проверить. Например:/app.component\.spec\.ts$/
Это запустит тест только для
app.component.spec.ts
.источник
Вы можете протестировать только определенный файл с помощью Angular CLI (
ng
команда) следующим образом:ng test --main ./path/to/test.ts
Дополнительная документация находится на https://angular.io/cli/test.
Обратите внимание, что, хотя это работает для файлов автономных библиотек, это не будет работать для компонентов / служб / и т. Д. Angular. Это связано с тем, что файлы angular зависят от других файлов (а именно от
src/test.ts
Angular 7). К сожалению,--main
флаг не принимает несколько аргументов.источник
component.spec.ts
файл, мы увидим, что тесты никогда не начнутся:Error: AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js
... Я уверен, что дальнейшее обходное решение может быть взломано вместе, но это то, что нужно знать из-за того, что настройка, выполненная внутри,src/main.ts
и ее импорт в этом случае недоступны.ng t
тест, который я пишу, проходит, но когда я запускаю конкретный файл, он выдает ошибку. TypeError: невозможно прочитать свойство getComponentFromError, имеющее значение null в TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js: 3112: 1) в TestBedViewEngine.get (node_modules/@angular/core/fesm2015/testing. 3230: 1) в Function.get (node_modules/@angular/core/fesm2015/testing.js: 2960: 1) в UserContext. <anonymous> (src / app / timebar.service.spec.ts: 14: 45) "Это работало для меня в каждом случае:
Однако я обычно получал «TypeError: Cannot read property 'ngModule' of null» для этого:
Версия @ angular / cli 10.0.4
источник
*.spec.ts
в любом случае. Например, чтобы запускать только тесты общих папок или выполнять поиск внутри src / app, используйтеng test --include='src/app/{shared,search}/*.spec.ts'
.--karma-config karma.conf.js
, иначе он попытается загрузить файл конфигурации,src/
а не по корневому пути.Если вы хотите иметь возможность контролировать, какие файлы выбираются из командной строки, мне удалось сделать это для Angular 7.
Таким образом, вам необходимо установить,
@angular-devkit/build-angular:browser
а затем создать настраиваемый плагин webpack для передачи регулярного выражения тестового файла. Например:angular.json - измените построитель тестов
@angular-devkit/build-angular:browser
и установите собственный файл конфигурации:extra-webpack.config.js - создайте конфигурацию webpack, которая считывает регулярное выражение из командной строки:
test.ts - редактировать спецификацию
Затем используйте следующее, чтобы изменить значение по умолчанию:
Я задокументировал предысторию здесь , заранее извиняюсь за типы и неправильные ссылки. Благодарим за ответ @ Aish-Anu, который указал мне в правильном направлении.
источник
У меня это работает в Angular 7. Он основан на опции --main команды ng. Я не уверен, что эта опция недокументирована и, возможно, может быть изменена, но у меня она работает. Я помещаю строку в свой файл package.json в раздел скриптов. Здесь, используя параметр --main с командой ng test, я указываю путь к файлу .spec.ts, который хочу выполнить. Например
Вы можете запускать сценарий так же, как и любой такой сценарий. Я запускаю его в Webstorm, щелкнув «test 1» в разделе npm.
источник
Решил для себя эту проблему с помощью grunt. У меня есть сценарий ворчания ниже. Что делает сценарий, так это берет параметр командной строки конкретного теста для запуска, создает копию test.ts и помещает туда это конкретное имя теста.
Чтобы запустить это, сначала установите grunt-cli, используя:
Поместите следующие зависимости grunt в свой package.json:
Чтобы запустить его, сохраните приведенный ниже файл grunt как Gruntfile.js в корневой папке. Затем из командной строки запустите его как:
Это запустит app.component.spec.ts.
Файл Grunt выглядит следующим образом:
источник
Добавьте к этому людей вроде меня, которые искали способ запустить одну спецификацию в Angular и нашли этот SO.
Согласно последним документам Angular (v9.0.6 на момент написания), у
ng test
команды есть--include
опция, в которой вы можете указать каталог*.spec.(ts|tsx)
файлов или только один.spec.(ts|tsx)
файл.https://angular.io/cli/test
источник
Требуется небольшое изменение
test.ts
файла внутри папки src:Вот,
test-example
точное имя файла, который нам нужно запуститьТаким же образом, если вам нужно протестировать только служебный файл, вы можете заменить имя файла на "/test-example.service"
источник
В терминале bash мне нравится использовать двойное тире. Используя VS Code, вы можете щелкнуть правой кнопкой мыши файл спецификации в проводнике или на открытой вкладке. Затем выберите «Копировать относительный путь». Выполните команду ниже, вставив относительный путь из буфера обмена.
Двойное тире сигнализирует об окончании параметров вашей команды
npm t
и передает все, что находится после этого, следующей команде, на которую указываетng t
. Не требует доработки и быстро дает желаемый результат.источник