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


138

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


Це відрізняється від того, як виконати лише одну тестову специфікацію з кутовою кліткою, оскільки це питання стосується запуску окремої специфікації. Йдеться про запуск окремого файлу. Рішення передбачає ту саму особливість специфіки Жасмін, але природа питання дещо інша.



Ви можете знайти відповідь тут: stackoverflow.com/questions/40683673 / ...
Сахил Shikalgar

Ви можете знайти відповідь тут: stackoverflow.com/questions/40683673 / ...
Сахил Shikalgar

Відповіді:


262

Я виявив, що Жасмін дозволяє вам префікс describeта itметоди з f(для фокусу?). Отже, fdescribeі fit. Якщо ви використовуєте будь-яке з них, карма запустить лише відповідні тести. Отже, щоб сфокусувати поточний файл, ви можете просто взяти верхній рівень describeі змінити його на fdescribe. Працює в моїх цілях.


9
легендарна відповідь
danday74

2
Не можу повірити, що така важлива функціональність не є більш очевидною та простою.
Еш

10
він працює, але це не ідеально, тому що вам потрібно змінити вихідний код, і ви можете закінчити перевірку модифікованого коду в контролі джерела.
Марко Альтьєрі

4
Будь ласка, додайте посилання на офіційну документацію , коли це можливо
jgpATs2w

Я шукав це, дивовижний
Карлос Е

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!');
  });
});

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


Кутова 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$/);

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


1
Власне кажучи, це звучить як найправильніша відповідь, навіть якщо на більшість питань, як це зробити, проблема вирішується за допомогою fit і fdescribe. Існує проблема git, щоб зробити це простіше у Карі : github.com/karma-runner/karma/isissue/1507 . В ідеалі, хоч і не просто, ми могли б налаштувати Кару, щоб ми могли внести зміни до одного тесту, а потім просто натиснути на нього у браузері, щоб повторити його з оновленням.
pumpkinthehead

3

Розширення Visual Studio Code

Найпростішим способом є використання розширення vscode-test-explorer разом із його дочірньою кутовою-карма-тест-дослідницею та адаптером жасмину-тесту , ви отримаєте список поточного тесту, який потрібно запустити по черзі, якщо ви хочете: введіть тут опис зображення

Це та сама відповідь, яку я дав на це запитання , є ще деякі подробиці.



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

Сподіваюся, це допомагає.


4
Чи можете ви вказати, яку версію ви використовуєте? Не працює з 1.7.x
FrEaKmAn

4
Не вийшло, як і для мене. Але я змінив його для роботи з опцією --main перед шляхом до файлу специфікації. Я використовував абсолютний шлях з нахилами вперед. Не пробували відносного шляху. Використання кутового 6. Не впевнений, чи це найкраще рішення, але, здається, працює для мене.
користувач2367418
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.