Testowanie funkcji do zgłaszania poprawnych wyjątków
Aby przetestować wyjątki, możemy użyć throwtwierdzenia dostarczonego przez Chai. Ta asercja pozwala nam określić typ wyjątku, który powinien zostać zgłoszony, oraz wszelkie dodatkowe szczegóły, które chcemy zweryfikować. Uwzględniając to stwierdzenie w naszych przypadkach testowych, możemy zapewnić, że nasze funkcje zachowują się zgodnie z oczekiwaniami i odpowiednio obsługują warunki błędów.
Rozważmy przykład, w którym mamy funkcję dzielącą dwie liczby. Chcemy mieć pewność, że funkcja zgłasza wyjątek podczas dzielenia przez zero. Możemy napisać przypadek testowy, używając twierdzenia Chai, throwaby sprawdzić, czy funkcja poprawnie rzuca a DivideByZeroErrorpodczas dzielenia przez zero.
const { expect } = require('chai');
function divide(a, b) {
if (b === 0) {
throw new Error('DivideByZeroError');
}
return a / b;
}
describe('divide', () => {
it('should throw DivideByZeroError when dividing by zero', () => {
expect(() => divide(10, 0)).to.throw('DivideByZeroError');
});
it('should return the correct result when dividing two numbers', () => {
expect(divide(10, 5)).to.equal(2);
});
});
W powyższym przykładzie używamy to.throwasercji, aby sprawdzić, czy dividefunkcja zwraca a DivideByZeroErrorpodczas dzielenia przez zero. Asercja jest opakowana w funkcję, aby mogła przechwycić wyjątek i wykonać niezbędne kontrole.
Uwzględniając testy prawidłowego zgłaszania wyjątków, możemy zapewnić, że nasze funkcje odpowiednio obsługują warunki błędów i dostarczają sensownych informacji zwrotnych w przypadku wystąpienia nieoczekiwanych sytuacji. Pomaga to poprawić ogólną jakość i niezawodność naszego kodu.
Podsumowując, testowanie funkcji zgłaszających wyjątki jest ważnym aspektem testowania oprogramowania. Dzięki twierdzeniu Chai throwmożemy łatwo zweryfikować, czy nasze funkcje zgłaszają oczekiwane wyjątki, gdy jest to konieczne. Włączając te testy do naszej strategii testowania, możemy zwiększyć niezawodność naszych aplikacji i zapewnić lepsze wrażenia użytkownika.
W trzecim artykule z serii „Node.js, Mocha i Chai” przyjrzymy się, jak testować funkcje i metody przy użyciu Chai. Chai to potężna biblioteka asercji do testowania wartości i wyników w kodzie JavaScript.
Testowanie metod obiektowych i ich zachowań
Aby zweryfikować metody obiektu, możemy użyć asercji dostarczonych przez frameworki testowe, takie jak Mocha i Chai. Twierdzenia te pozwalają nam formułować twierdzenia dotyczące właściwości i zachowania obiektów.
Rozważmy przykład, w którym mamy obiekt o nazwie calculatorz metodami dodawania, odejmowania, mnożenia i dzielenia. Chcemy mieć pewność, że te metody zwracają poprawne wyniki. Możemy napisać przypadki testowe, używając twierdzeń Chai, aby zweryfikować zachowanie tych metod.
const { expect } = require('chai');
const calculator = {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
multiply: (a, b) => a * b,
divide: (a, b) => a / b,
};
describe('calculator', () => {
it('should return the correct sum when adding two numbers', () => {
expect(calculator.add(5, 3)).to.equal(8);
});
it('should return the correct difference when subtracting two numbers', () => {
expect(calculator.subtract(5, 3)).to.equal(2);
});
it('should return the correct product when multiplying two numbers', () => {
expect(calculator.multiply(5, 3)).to.equal(15);
});
it('should return the correct quotient when dividing two numbers', () => {
expect(calculator.divide(6, 3)).to.equal(2);
});
});
W powyższym przykładzie używamy twierdzenia Chai, expectaby zweryfikować, czy metody obiektu calculatorzwracają oczekiwane wyniki. Każdy przypadek testowy koncentruje się na określonej metodzie i sprawdza, czy zwraca poprawne dane wyjściowe dla danych danych wejściowych.
Uruchamiając te przypadki testowe, możemy upewnić się, że metody obiektu calculatorzachowują się zgodnie z oczekiwaniami i zapewniają dokładne wyniki.
Oprócz sprawdzania wartości zwracanych przez metody możemy również użyć asercji do weryfikacji innych właściwości i zachowania obiektów. Chai zapewnia szeroki zakres asercji, które pozwalają nam na dokonywanie różnego rodzaju asercji na obiektach, takich jak sprawdzanie wartości właściwości, weryfikowanie wywołań metod i nie tylko.
Dogłębnie testując metody obiektu, możemy zapewnić ich poprawność i niezawodność, co wpływa na ogólną jakość naszej bazy kodu.