English for Vitest Developers
Master the English vocabulary for unit testing with Vitest — mocks, spies, snapshots, and coverage reports.
Vitest став типовим модулем тестування для проектів JavaScript і TypeScript, заснованих на Vite, і він поставляється зі словником, який нерідко змушує англомовних людей заплутатися. Слова, такі як «шпигун», «клаптик» і «модель» використовуються в тестуванні, але означають різні речі. Знаючи, як правильно використовувати ці терміни, ви зможете писати більш чіткі описи PR, робити внесок у технічні обговорення і читати документацію Vitest без вгадування.
Ключовий словник
- Нет, не надо
Повний замінник реального модуля або функції, яким ви повністю керуєте під час тестів. У Vitest,
vi.mock('module-name')замінює весь модуль автоматично створеними заголовками, які ви можете налаштувати.
- Приклад: « Я підставив службу електронної пошти, щоб тест не надсилав справжні листи клієнтам. » *
Шпион
Оболонка для реальної функції, яка відстежує, як її викликали — аргументи, кількість викликів, значення повернення — без зміни її поведінки. Створено з vi.spyOn().
- Приклад: « Я додав шпигун на
console.error, щоб запевнити, що компонент записує у журнал правильне повідомлення про помилку. » *
- Нет, нет, нет
Спрощений замінник функції, яка повертає попередньо визначене значення, використовується, коли ви не бажаєте виконувати реалізовану функцію. У Vitest,
vi.fn()створює функцію stub, яку можна налаштувати за допомогою.mockReturnValue().
- Приклад: « Заголовок повертає порожній масив, тому компонент відображає інтерфейс користувача у порожньому стані під час тестування. » *
Снимок Збережена серіалізація значення — часто відтворений вивід компонента — з яким Vitest порівнює його під час наступних тестових запусків. Якщо вивід зміниться, перевірка зазнає невдачі, поки ви не переглянете і не оновите знімок.
- Приклад: « Під час перевірки знімків було виявлено несподівану зміну назви класу у компоненті кнопки. » *
** Поріг покриття ** Мінімальний відсоток коду, який має бути виконано за допомогою тестів. Якщо рівень покриття опускається нижче порогу, конвеєр CI завершується невдало. Налаштування за метрикою: рядки, функції, гілки, команди. Приклад: “Наша межа покриття гілок становить 80% — нова функція утиліти знизила нас до 76%, тому нам потрібно більше тестів.”
** Описати блок **
Виклик describe(), який групує пов’язані тести під спільною міткою. Вкладення блоків опису створює ієрархію, яку можна прочитати і яка з’ явиться у виводі тесту.
- Приклад: « Я закріпив перевіркові тести у блоку опису під назвою « коли форма порожня », щоб вивід було легше читати. » *
** перед кожним / після кожного гачка ** Функції, які виконуються перед або після кожного тесту у наборі. Використовується для налаштування спільного стану або очищення побічних ефектів, щоб тести залишалися незалежними.
- Приклад: « beforeEach hook повертає склад до початкового стану, щоб кожен тест починався з відомого базисного стану. » *
** vi. fn () **
Функція Vitest для створення імітаційної функції з нуля. Він стежить за викликами і може бути налаштований на повернення певних значень, викидання помилок або виконання нетипової реалізації.
Приклад: “Я передав vi.fn() як onSubmit prop і потім стверджував, що його викликали один раз з правильним вантажем.”
Звичайні фрази
** В обзорах коду: **
- Цей тест використовує справжній HTTP-клієнт — чи можемо ми замінити його на моку, щоб тест не вдарив по мережі?»
- «Шпигун тут ніколи не скидається між тестами; додайте виклик
vi.restoreAllMocks()вafterEach, щоб запобігти витоку стану» - «Снимок досить великий — якщо він часто змінюється, то це створить шум в PR. Розгляньте більш цілеспрямоване твердження замість цього»
В стоячих позах:
- «Я пишу тести одиниць для утилити auth — я насміхаюся над службою токенів і стверджую логіку оновлення в ізоляції»
- «Покриття становить 73 % — мені потрібно додати тести для гілок помилок, перш ніж цей PR буде готовий до злиття»
- «Перед кожним гачком було дубльовано три тестових файли, тому я витягнув їх у спільний помічник налаштування»
** У документації: **
- «Використовуйте
vi.spyOn(), коли ви хочете спостерігати виклики до реальної функції без заміни її реалізації» - “Запустити
vitest --coverageдля створення звіту про покриття; пороги налаштовані вvite.config.tsпідtest.coverage.” - «Знімок зберігається в
__snapshots__/поряд з тестовим файлом; заповнити їх разом з тестом, який їх створив»
Фрази, яких слід уникати
Плутанина між «моук» і «шпигун» — Нерідні носії часто використовують «моук» для всього. Якщо початкова функція все ще виконується, але ви стежите за нею, скажіть « spy ». Якщо ви повністю замінили функцію, скажіть « mock ». Рецензенти помітять різницю: « Я спостерігав за fetch » і « Я спостерігав за fetch » — це дві різні дії.
** Використання фрази « перевірка неправильна », якщо ви маєте на увазі, що знімок потребує оновлення ** — Якщо знімок зазнає невдачі через навмисну зміну інтерфейсу користувача, правильним твердженням буде « оновити знімок » або « знімок застарілий ». Використання фрази « перевірка неправильна » означає, що у самому тесті є помилка.
** Як сказати « порожній тест » ** — Якщо у тесті немає тверджень, правильним терміном буде « успішний тест без тверджень » — або, більш поширеним, ви можете назвати його « незавершеним тестом » або зауважити, що у ньому « немає тверджень ». Справді порожній тестовий файл називається « файлом- замінником » або « файлом- фрагментом тесту »
Краткий справочник
| Term | How to use it |
|---|---|
| mock | ”We mock external dependencies to keep unit tests fast and deterministic.” |
| spy | ”A spy lets us assert how many times a function was called.” |
| stub | ”The stub always returns null to test the null-handling path.” |
| coverage threshold | ”The pipeline enforces an 80% line coverage threshold.” |
| snapshot | ”Run vitest -u to update all outdated snapshots at once.” |
Поряд з основними: Рефінансування Вашої професійної комунікації як найшвидшого розробника
До цього часу ми описали основні концепції Vitest - зосереджуючись на тому, як писати ефективні тести з використанням моків, шпигунів, знімків і розуміння звітів про покриття. Але давайте будемо чесними, навіть з ідеальним тестовим кодом, комунікація є ключем у будь-якому середовищі розробки. Якщо ви не є носієм англійської мови, особливо коли працюєте з міжнародними командами або документуєте свою роботу для більшої аудиторії, точне і професійне формулювання може зробити * величезну * різницю. Це не просто про розуміння технічних термінів; це про передачі ваших ідей чітко і впевнено.
Однією з поширених областей тертя є коментарі перегляду коду. Отримавши зворотній зв’язок, наприклад, «Це потребує більшого покриття» або «Розгляньте можливість використання мока для цієї залежності», це може бути пригнічуючим, особливо якщо ви боретеся, щоб сформулювати свої міркування або зрозуміти очікування рецензента. Замість того, щоб просто прийняти коментар, спробуйте дати чітке і докладне пояснення у своїй відповіді. Наприклад, сказати: «Я ціную відгук про огляд. Я спочатку зосередився на перевірці основної логіки, але розгляну додавання тестового випадку для [спеціфічної функціональності], щоб вирішити цю проблему.” демонструє залученість і бажання співпрацювати. Аналогічно, коли ви описуєте мету PR, використовуйте мову, яка підкреслює * чому* було внесено зміни — « Цей PR переробляє компонент отримання даних для поліпшення продуктивності і читабельності, розв’ язання визначених проблем у початковій реалізації ». Уникайте жаргонних слів, де це можливо, або поясніть їх чітко, якщо це необхідно.
Інший поширений сценарій включає обговорення про помилки знімок. Отримання електронної пошти з повідомленням « Виявлено невідповідність знімків » є не просто технічним повідомленням; це запрошення на пояснення. Замість того, щоб реагувати оборонно, підтвердіть існування проблеми і запитайте більше інформації: « Чи можете ви, будь ласка, надати вивід даних з невдалого запуску знімку? » Було б корисно зрозуміти відмінності між очікуваним і фактичним станами. Це показує ініціативу і бажання швидко вирішити проблему. Пам’ятайте, чітке спілкування будує довіру і сприяє ефективному співробітництву. Сфокусування на тому, що потрібно змінити і чому, є набагато більш впливовим, ніж просто заявляти, що щось «не підходить»
Нарешті, розглянемо, як ви описуєте свої тести в описах PR. Хороший опис повинен чітко описувати мету кожного тесту і його очікувану поведінку. Не просто наведіть список тестів, а поясніть їх мету. « Тести перевіряють правильність обчислення [метрики] на основі наданих вхідних даних ». Це надає контекст для переглядачів і допомагає їм швидко зрозуміти обсяг ваших зусиль з тестування.
Ось простий приклад, що використовує vitest для демонстрації типового сценарію:
# Running a snapshot test with Vitest
vitest run --ui
За допомогою цієї команди, якщо її використовувати разом з відповідно розробленими тестами, ви зможете швидко визначити розбіжності між очікуваним і фактичним станом вашої програми. Спрямування уваги на чітке спілкування щодо цих інструментів і їх результатів значно підвищить вашу ефективність як розробника Vitest і сприяє плавнішому потоку роботи у вашій команді.