Το Jest είναι ένα ευχάριστο πλαίσιο δοκιμών JavaScript με έμφαση στην απλότητα, τη μηδενική διαμόρφωση (zero-config) και τις άμεσες δοκιμές στιγμιότυπου.
Εκτέλεση δοκιμών και παράμετροι CLI (CLI Flags)
jest # Εκτελεση ολων των δοκιμων
jest --watch # Εκτελεση σε διαδραστικη λειτουργια παρακολουθησης
jest --coverage # Δημιουργια αναφορας καλυψης κωδικα
jest path/to/test.js # Εκτελεση συγκεκριμενου αρχειου δοκιμης
jest -t "test name pattern" # Φιλτραρισμα δοκιμων βασει συμβολοσειρας περιγραφης
jest --runInBand # Σειριακη εκτελεση σε μια μοναδικη διεργασια
Κοινοί Matchers (Common Matchers)
// Αληθεια και ισοτητα
expect(val).toBe(42); // Αυστηρη ισοτητα (Object.is)
expect(val).toEqual({ a: 1 }); // Βαθια δομικη ισοτητα
expect(val).toStrictEqual({ a: 1 }); // Ελεγχει επισης τα πρωτοτυπα τυπων
expect(val).toBeNull();
expect(val).toBeDefined();
expect(val).toBeTruthy();
expect(val).toBeFalsy();
// Αριθμοι και συγκρισεις
expect(val).toBeGreaterThan(3);
expect(val).toBeGreaterThanOrEqual(3.5);
expect(val).toBeCloseTo(0.3, 5); // Συγκριση αριθμων κινητης υποδιαστολης
// Συμβολοσειρες και πινακες
expect(str).toMatch(/regex/);
expect(arr).toContain('item');
expect(arr).toHaveLength(3);
// Διαχειριση εξαιρεσεων
expect(() => compileCode()).toThrow();
expect(() => compileCode()).toThrow(ConfigError);
Ασύγχρονος κώδικας (Asynchronous Code)
test('resolves with data', async () => {
const data = await fetchData();
expect(data).toHaveProperty('status', 200);
});
test('handles promise rejection', async () => {
await expect(fetchData('invalid')).rejects.toThrow('Not Found');
});
Συναρτήσεις Mock και Spies (jest.fn() & Spies)
const mockFn = jest.fn().mockReturnValue('mocked result');
mockFn('arg1');
expect(mockFn).toHaveBeenCalledTimes(1);
expect(mockFn).toHaveBeenCalledWith('arg1');
// Mocking module methods
const spy = jest.spyOn(api, 'getUser').mockResolvedValue({ id: 1, name: 'Alice' });
const user = await api.getUser(1);
expect(spy).toHaveBeenCalled();
spy.mockRestore(); // Επαναφορα αρχικης υλοποιησης
Έλεγχοι στιγμιότυπου (Snapshot Testing)
test('renders correctly', () => {
const tree = renderer.create(<Button label="Submit" />).toJSON();
expect(tree).toMatchSnapshot();
});
Άγκιστρα ρύθμισης και εκκαθάρισης (Setup and Teardown)
beforeAll(() => database.connect());
afterAll(() => database.disconnect());
beforeEach(() => database.clear());
afterEach(() => jest.clearAllMocks());