ToolStabil

Test Runner

Unit- und Integrationstests mit Assertions, Mocking, Fixtures und Coverage-Reports.

Features

Assertions

Umfangreiche Assert-API

Mocking

Mocks, Spies, Stubs

Async

Async/Await Support

Coverage

Code-Coverage Reports

Fixtures

Setup/Teardown

Snapshots

Snapshot Testing

Tests schreiben

tests/user_test.velinvelin
use test::{ describe, it, expect, mock }

describe("UserService", || {
    it("sollte User erstellen", || {
        let service = UserService::new();
        let user = service.create("Max", "max@example.com");
        
        expect(user.name).toBe("Max");
        expect(user.email).toContain("@");
        expect(user.id).toBeDefined();
    });
    
    it("sollte bei ungültiger Email fehlschlagen", || {
        let service = UserService::new();
        
        expect(|| service.create("Max", "invalid"))
            .toThrow("Invalid email");
    });
    
    it("sollte async funktionieren", async || {
        let user = await UserService::findById("123");
        expect(user).not().toBeNull();
    });
});

Mocking

use test::{ mock, spy }

// Mock erstellen
let mockDb = mock(Database, {
    findUser: |id| User { id, name: "Mock User" },
    save: |user| Ok(user)
});

// Spy für echte Aufrufe
let emailSpy = spy(EmailService);
service.sendWelcome(user);

expect(emailSpy.send).toHaveBeenCalledWith(user.email);
expect(emailSpy.send).toHaveBeenCalledTimes(1);

Tests ausführen

# Alle Tests
velin test

# Bestimmte Datei
velin test tests/user_test.velin

# Mit Pattern
velin test --filter "UserService"

# Mit Coverage
velin test --coverage

# Watch Mode
velin test --watch

Assertions

// Gleichheit
expect(value).toBe(expected);
expect(value).toEqual(expected);  // Deep equal

// Typen
expect(value).toBeNull();
expect(value).toBeDefined();
expect(value).toBeInstanceOf(User);

// Zahlen
expect(num).toBeGreaterThan(5);
expect(num).toBeLessThanOrEqual(10);
expect(num).toBeCloseTo(3.14, 2);

// Strings
expect(str).toContain("hello");
expect(str).toMatch(/\d+/);

// Arrays
expect(arr).toHaveLength(3);
expect(arr).toContain(item);

// Negation
expect(value).not().toBe(other);