Ъглова - Как да добавяте Жасмин персонализирани мачове при тестване на единици

Както в Javascript, така и в Typescript

Снимка на Hosea Georgeson на Unsplash

Jasmine е BDD рамка, която осигурява много вградени съвпадения за тестване на единици. Но понякога се налага да създаваме собствени персонализирани матрици, за да улесним всички сценарии за тестване или да направим по-четими тестови случаи.

В тази публикация ще преминем през жасминовите матрици и тяхното използване както в Javascript, така и в Typescript.

  • Какво представляват мачовете
  • Вградени Мачове и как да ги използвате
  • Персонализирани Mathers и как да ги дефинираме
  • Примерен проект в Javascript
  • Примерен проект в Typescript
  • Как да дефинираме персонализирани съвпадения в ъглови
  • резюме

Какво представляват матчерите

Мачовете са нищо друго, освен да сравняват функциите, за да сравнят действително очаквания и действителен резултат в тестовите спецификации.

Ето пример за един от Мачовете. Ако погледнем ред номер 4, toBe е съвпадението и винаги се използва с очакване. Той просто сравнява реалния резултат с очаквания резултат и връща булева стойност.

Вградени Мачове и как да ги използвате

Жасмин осигурява толкова много вградени съвпадения и нека да видим някои от тях тук.

предложения за съвпадение от VSCode

Ето как трябва да ги използваме.

Персонализирани Mathers и как да ги дефинираме

През повечето време тези вградени мачове от жасмин са достатъчни. Но понякога е необходимо да създадем нашите собствени съвпадения.

Jasmine предоставя функция, наречена addMatchers, така че да можем да разширяваме съвпадения с нашите персонализирани или определени от потребителя функции. Трябва да поставим това във функцията beforeEach.

Нека да видим как тук дефинираме персонализиран мач. Както можем да видим по-долу, ние дефинираме toBeOlderThan, който връща функция за сравнение с резултат от обект с полета pass and message. Ако тестът не успее, каквото и да е съобщението, което дадем тук, ще се покаже на конзолата.

Примерен проект в Javascript

Написах репо за тази публикация, която можете да използвате, за да следвате. За да го използвате, отидете на връзката по-горе, клонирайте и инсталирайте.

// клониране на репо
git clone https://github.com/bbachi/jasmine-tests.git
// инсталирайте зависимостите и тествайте
npm инсталиране
npm тест

Имаме човек с методи getName, getAge, setName и setAge

Искаме да тестваме над класа с персонализираните съпоставители toBeOlderThan, toBeLastNameEqualTo, toBeFirstNameEqualTo. Нека да дефинираме тези персонализирани съвпадения в отделен обект като по-долу и да добавим този обект във функцията beforeEach.

Ето останалата част от файла, в който добавяме по-горе персонализирани matchers обект на addMatchers и тестваме проекта.

Ето изхода, когато провеждаме npm тест.

изходен тест

Примерен проект в Typescript

Написах репо за проекта за пишещ текст, който можете да използвате, за да следвате. За да го използвате, отидете на връзката по-горе, клонирайте и инсталирайте.

// клониране на проекта
git clone https://github.com/bbachi/jasmine-tests-typescript.git
// инсталирайте зависимости и стартирайте тест
npm инсталиране
npm тест

Имаме клас човек в typecript с методи getName, getAge, setName и setAge

Трябва да инсталираме следните дефиниции на типа, тъй като те са в typecript

"@ видове / жасмин": "^ 3.3.12",
"@ видове / възел": "^ 12.0.0",
"ts-node": "^ 8.1.0",
"typecript": "^ 3.4.5"

Ето персонализираните методи в typecript в отделен файл под src / test-helpers

Трябва да дефинираме дефинициите на типа за тези персонализирани съвпадения, тъй като те са разширени и не присъстват във файла за дефиниране на типа на жасмин и за разпознаване на компилатора на typecript.

Можем да ги декларираме под пространството от имена на жасмин, както по-долу от ред номер 4.

Ето изхода, когато провеждаме npm тест.

изходен тест

Как да дефинираме персонализирани съвпадения в ъглови

В Angular ние дефинираме персонализираните machers по същия начин. Трябва да дефинираме custom-matcher.ts за всички персонализирани matchers и custom-matcher.d.ts за определенията на типа в папката за тестване.

отделна папка за персонализиран матч

Импортирайте както custom-matcher.ts, така и custom-matcher.d.ts във spec файл като по-долу.

Премахнах всички останали кодове от файла по-долу за краткост.

Ето изхода, когато стартирате npm тест

изходен тест

резюме

  • Мачовете са функциите за сравнение, които сравняват действителния и очаквания резултат и връщат булева стойност.
  • Jasmine е BDD тестова рамка, която Angular използва за единично тестване.
  • Мачовете винаги трябва да се използват заедно с очакванията.
  • Jasmine осигурява вградени матчери, които могат да се използват директно в проекта.
  • Можем да разширим матчетата с жасмин с функцията, наречена addMatchers ().
  • Жасмин персонализирани съответстващи могат да се пишат както в JavaScript, така и в машинопис.
  • Трябва да декларираме файлове за дефиниране на типа за персонализирани съвпадения за компилатора на typecript, който да компилираме.
  • Jasmine.addMatchers () винаги трябва да се използва отвътре преди блокаEEEE ().

ресурси

  • Персонализиран Javescript Git repo
  • Custom matcher Typescript Git repo
  • Персонализирано ъглово Git repo

Благодарим ви за четенето и ако ви се стори полезно, моля, дайте го хлопайте и помогнете на другите да го намерят. Моля, следвайте ме за още интересни истории :)