Запуск одного тестового файла

139

Есть ли способ запустить ng testдля одного файла вместо всего набора тестов? В идеале я хотел бы получить как можно более быстрый цикл обратной связи, когда я редактирую файл, но karmaпри каждом сохранении выполнял бы весь набор, что немного медленно, когда вы создаете достаточно большой набор тестов.


Это отличается от того, как выполнить только одну тестовую спецификацию с помощью angular-cli, тем, что этот вопрос касается запуска отдельной спецификации. Речь идет о запуске отдельного файла. Решение включает ту же особенность спецификации Jasmine, но суть вопроса немного другая.

Эллиот Ларсон
источник
Вы можете найти ответ здесь: stackoverflow.com/questions/40683673/…
Сахил Шикалгар
Вы можете найти ответ здесь: stackoverflow.com/questions/40683673/…
Сахил Шикалгар

Ответы:

264

Я обнаружил, что Jasmine позволяет добавлять префиксы describeи itметоды с помощью f(для фокусировки?). Итак, fdescribeи fit. Если вы воспользуетесь любым из них, karma запустит только соответствующие тесты. Итак, чтобы сфокусировать текущий файл, вы можете просто взять верхний уровень describeи изменить его на fdescribe. Работает для моих целей.

Эллиот Ларсон
источник
9
легендарный ответ
danday74 08
2
Не могу поверить, что такая важная функциональность не является более очевидной и простой.
Эш
10
он работает, но не идеален, потому что вам нужно изменить исходный код, и вы можете в конечном итоге проверить измененный код в системе управления версиями.
Марко Альтьери
4
Пожалуйста , добавьте ссылки на официальную документацию , если это возможно
jgpATs2w
Я искал это, Потрясающе
Carlos E
26

Стоит отметить, что вы можете отключить определенный тест, не комментируя его, xdescribeиxit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

И как кто-то уже сказал, если вы хотите сосредоточиться на каком-то тесте, тогда fdescribeиfit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});
DiPix
источник
25

В наши дни этого можно достичь с помощью includeопции. https://angular.io/cli/test#options

Это совпадение с глобусом, например:

ng test --include='**/someFolder/*.spec.ts'

Я не могу найти его в примечаниях к выпуску 8.1.0 , но @Swoox упоминает ниже, что это функция после версии cli 8.1.0. Спасибо, что разобрались в этом.

Леви
источник
1
Это похоже на недавнее обновление. Возможно, вы захотите указать, какая версия нужна. Требуется CLI 8.1.
Swoox
Вроде убрали в v9.1 :(
rmcsharry
2
Я только что протестировал это в CLI v9.1.0, и он отлично работает.
Саджан Сингх
9

Я обнаружил, что ng testесть дополнительная опция, --includeкоторую вы можете использовать, чтобы иметь возможность запускать тест для одного файла, или для определенного каталога, или для группы файлов:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs

вар-Бен
источник
Angular 9 - вроде убрали
rmcsharry
Нет, он еще доступен в NG 9.
tephyr
6

Вы можете перейти src/test.tsи изменить следующую строку:

const context = require.context('./', true, /\.spec\.ts$/);

в

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

введите описание изображения здесь

Raghav
источник
1
Строго говоря, это звучит как наиболее правильный ответ, хотя на большинство вопросов о том, как это сделать, проблема решается с помощью fit и fdescribe. В Karma есть проблема с git, чтобы упростить это: github.com/karma-runner/karma/issues/1507 . В идеале, хотя и не просто, мы могли бы настроить Karma так, чтобы мы могли внести изменения в один тест, а затем просто щелкнуть по нему в браузере, чтобы повторно запустить его с обновлением.
pumpkinthehead
3

Расширение кода Visual Studio

Самый простой способ - использовать расширение vscode-test-explorer вместе с его дочерними angular-karma-test-explorer и jasmine-test-adapter , вы получите список текущих тестов для запуска один за другим, если хотите: введите описание изображения здесь

Это тот же ответ, который я дал на этот вопрос , там есть некоторые подробности.

Луис Лимас
источник
3

Использование ng test --main file.spec.ts

Niraj
источник
0

Вы должны пойти src/test.tsи можете изменить следующий код строки 18:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

в

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

введите описание изображения здесь

Прити Джха
источник
-3

Работает, если вы укажете свой файл спецификации в качестве параметра.

Например:

ng test foo.spec.ts

Надеюсь это поможет.

gustavomcastro
источник
4
Можете указать, какую версию вы используете? Не работает с 1.7.x
FrEaKmAn
4
У меня тоже не получилось. Но я изменил его, чтобы он работал с параметром --main перед путем к файлу спецификации. Я использовал абсолютный путь с косой чертой. Не пробовал относительный путь. Использование Angular 6. Не уверен, что это лучшее решение, но мне кажется, что оно работает.
user2367418 02