Deno Post — testy jednostkowe

Źródło zdjęcia: Dimitrij Agal

Deno to nowe środowisko wykonawcze dla JavaScript i TypeScript wydane w 2020 roku z naciskiem na bezpieczeństwo, niezawodność i produktywny rozwój. Ponieważ jest stosunkowo nowy i wielu modułów Node nie można od razu użyć w Deno, znalezienie odpowiednich bibliotek i frameworków może być prawdziwym wyzwaniem. W tym poście przyjrzymy się, jak rozpocząć testowanie jednostkowe w Deno. Zaczniemy od omówienia niektórych wbudowanych funkcji i przejdziemy do zbadania kilku frameworków testowych, które są obecnie opracowywane.

Biblioteka Standardowa

Jednym z celów Deno jest dostarczenie szeregu gotowych narzędzi programistycznych przy minimalnej konfiguracji. W związku z tym udostępnia moduł o nazwie, testingktóry może być używany jako podstawowa biblioteka asercji. Możemy pobrać ten moduł za pośrednictwem jego adresu URL:

import * as testing from "https://deno.land/[email protected]/testing/asserts.ts";

import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";

function sum(a: number, b: number): number {
    return a + b;
}

Deno.test("sum - should return the sum of two numbers correctly", function(): void {
    assertEquals(sum(1, 2), 3);
});

Deno.test({
    name: "sum - should return the sum of two numbers correctly",
    fn(): void {
        assertEquals(sum(1, 2), 3);
    }
});

Rhum

Jeśli kiedykolwiek pisałeś testy dla Node, prawdopodobnie masz doświadczenie z frameworkami takimi jak Jest, Jasmine i Mocha. Rhum to framework testowy Deno o dość podobnym stylu. Pozwala pisać przypadki testowe i logicznie grupować je w Zestawy Testów i Plany Testów. Zacznij od importu Rhum:

import { Rhum } from "https://deno.land/x/[email protected]/mod.ts";

Napiszmy test dla sumz Rhum! Możemy użyć, Rhum.assertsaby uzyskać dostęp do wszystkich asercji ze standardowej biblioteki Deno i uruchomić je za pomocą programu uruchamiającego testy Deno, jednocześnie wyświetlając wynik testu we własnym formacie Rhuma. Na razie możemy napisać jeden testSuitez jednym testCase:

Rhum.testSuite("sum", () => {
    Rhum.testCase("should sum two numbers correctly", () => {
        Rhum.asserts.assertEquals(sum(1, 2), 3);
    });
});
Rhum.run();

Rhum.testPlan("utils.test.ts", () => {
    ... 
});

Oprócz zestawów testowych Rhum zapewnia również możliwość kpiwania obiektów i klas. Może to być pomocne w testowaniu określonego kodu bez zewnętrznych zależności, co jest jedną z rzeczy, które sprawiają, że test jednostkowy jest dobry.

Dokumentacja Rhum jest bardzo jasnym przykładem używania mocków. Poniżej znajdziesz ten przykład, ale nieco zmieniony. sumFunkcja została dodana jako metody klasy MathService, który jest następnie wstrzykiwany do innej klasy Calculatorjako zależność.

class MathService {
    sum(a: number, b: number): number {
        return a + b;
    }
}
class Calculator {
    constructor(private service: MathService) {}
    sum(a: number, b: number): number {
        return this.service.sum(a, b);
    }
}
const mock = Rhum.mock(MathService).create();
const calculator = new Calculator(mock);
Rhum.asserts.assertEquals(mock.calls.sum, 0);
calculator.add(1, 1);
Rhum.asserts.assertEquals(mock.calls.sum, 1);
Rhum.run();

Rhum zapewnia cztery haczyki, które mogą być wykorzystane do uruchomienia kodu przed lub po testach: beforeEach, beforeAll, afterEachi afterAll. Są one przydatne do resetowania wartości do określonego stanu lub, jeśli planujesz pisać testy integracyjne, są przydatne do uruchamiania/zatrzymywania serwerów HTTP lub testowych baz danych.

pakiet testowy

Innym wyborem testowym dla Deno jest test_suitemoduł, który zapewnia również możliwość organizowania testów w pakietach (kto by zgadł! :) ) i hooków. Jest na wcześniejszym etapie rozwoju Rhumi nie dostarcza prób, ale przyjmuje składnię i styl, które są bliższe natywnemu modułowi testowemu Deno. Poniżej znajduje się przykład użycia test_suiterazem z Deno Standard Library:

import {
    test,
    TestSuite
} from "https://deno.land/x/[email protected]/mod.ts";
/asserts.ts";
import {
    getUser,
    resetUsers,
    User
} from "https://deno.land/x/[email protected]/example/user.ts";
import { assertEquals } from "https://deno.land/[email protected]/testing
interface UserSuiteContext {
    user: User;
}
const userSuite: TestSuite<UserSuiteContext> = new TestSuite({
    name: "user",
    beforeEach(context: UserSuiteContext) {
        context.user = new User("Alice");
    },
    afterEach() {
        resetUsers();
    }
});
test(userSuite, "creates a user correctly", () => {
    const user = new User("Bob");
    assertEquals(user.name, "Bob");
};

Ten post obejmował kilka rozwiązań testowania jednostkowego dla Deno: std/testing, Rhumi test_suite. Chociaż wszystkie są wciąż rozwijane, oferują już całkiem niezłą liczbę możliwości testowych dla programistów Deno. W porównaniu z kłopotami z konfiguracją platformy testowej do pracy z modułami ES i TypeScript w Node.js, doświadczenie Deno wydaje się dużym krokiem naprzód, ponieważ konfiguracja jest naprawdę prosta (bez npm, bez package.json, bez wymaganego tsconfig) . Jednak frameworki takie jak Rhumnie oferują wszystkiego, co, powiedzmy, Jestma teraz. Niemniej jednak jest wystarczająco dużo, aby użyć programowania sterowanego testami, dokonać refaktoryzacji z ufnością lub po prostu stworzyć kod lepszej jakości.

Suggested posts

Moje najczęściej używane zasoby dotyczące kodowania

Moje najczęściej używane zasoby dotyczące kodowania

W tym tygodniu otrzymałem wiadomość e-mail od członka codziennej listy e-mailowej. Chcieli wiedzieć: Jakie zasoby odwiedzasz codziennie, co tydzień i co miesiąc? Świetne pytanie! Cieszę się, że mogę podzielić się spostrzeżeniami na temat mojego przepływu pracy i najlepszych zasobów, z których korzystam.

Seria Lit Library — 1: Głębokie zanurzenie w bibliotece lit-html

Seria Lit Library — 1: Głębokie zanurzenie w bibliotece lit-html

Celem tej serii blogów jest zagłębienie się w bibliotekę Lit i uzyskanie pełnego zrozumienia jej unikalnych funkcji oraz tego, jak wyróżnia się na tle innych bibliotek i frameworków na rynku. Cykl podzielony jest na trzy części, obejmujące takie tematy jak 1.

Related posts

3 sprawdzone sposoby na poprawę umiejętności pisania

Korzyści płynące z pisania i strategie, które Ci w tym pomogą

3 sprawdzone sposoby na poprawę umiejętności pisania

W 2022 roku, wraz z wydaniem GPT-3, umiejętność pisania wydaje się tracić na znaczeniu. Dzięki sztucznej inteligencji osoby o słabym pisaniu mogą również generować wysokiej jakości personel.

Koniec z hasłami — w jaki sposób klucze dostępu zastąpią Twoje hasło

Koniec z hasłami — w jaki sposób klucze dostępu zastąpią Twoje hasło

Aby uniknąć niejasności, zostaną użyte następujące terminy; uwierzytelniający; Telefon komórkowy używany do tworzenia Witryny logowania; Witryna internetowa lub aplikacja, z której korzysta użytkownik, aby dokonać żądania logowania do Usługi; Sprzedawca świadczący daną usługę np

Ponowne przemyślenie mediów: pięć prawd McChesneya i przyszłość komunikacji

W dzisiejszym hiperpołączonym świecie systemy medialne odgrywają kluczową rolę w kształtowaniu opinii publicznej, a co za tym idzie, w demokratycznym procesie decyzyjnym. W swojej dogłębnej analizie ekonomii politycznej komunikacji uczony Robert McChesney kwestionuje konwencjonalną wiedzę i przedstawia to, co nazywa „pięcioma prawdami” o mediach.

Powolna erozja: ujawnianie sposobów, w jakie ludzie marnują swoje kariery

Powolna erozja: ujawnianie sposobów, w jakie ludzie marnują swoje kariery

W dzisiejszym dynamicznym i konkurencyjnym świecie kariera odgrywa znaczącą rolę w rozwoju osobistym, stabilności finansowej i ogólnej satysfakcji z życia. Jednak wiele osób wpada w nieustający cykl stagnacji i niezadowolenia, stopniowo marnując swoje życie zawodowe.