1 minute read

1. Thiết lập và dọn dẹp test

beforeAll(() => { /* chạy 1 lần trước tất cả các test */ });
afterAll(() => { /* chạy 1 lần sau tất cả các test */ });
beforeEach(() => { /* chạy trước mỗi test */ });
afterEach(() => { /* chạy sau mỗi test */ });

2. Cú pháp test cơ bản

test('mô tả test', () => {
  expect(giá_trị_thực_tế).toBe(giá_trị_mong_đợi);
});

it('cũng giống như test', () => {
  expect(true).toBe(true);
});

3. Các matchers thường dùng

So sánh giá trị

expect(1 + 1).toBe(2);
expect(value).not.toBe(null);

So sánh object hoặc mảng

expect(obj).toEqual({ a: 1 });

Kiểm tra giá trị đặc biệt

expect(value).toBeNull();
expect(value).toBeDefined();
expect(value).toBeTruthy();
expect(value).toBeFalsy();

So sánh số

expect(num).toBeGreaterThan(5);
expect(num).toBeLessThanOrEqual(10);

Chuỗi

expect(str).toMatch(/regex/);

Mảng

expect(arr).toContain('item');
expect(arr).toHaveLength(3);

4. Hàm mock (giả lập)

const mockFn = jest.fn();
mockFn('arg1');
expect(mockFn).toHaveBeenCalled();
expect(mockFn).toHaveBeenCalledWith('arg1');

mockFn.mockReturnValue('giá trị');
mockFn.mockResolvedValue('giá trị async');
mockFn.mockRejectedValue(new Error('lỗi'));

5. Spy hàm thật

const obj = {
  method: () => 'real',
};

jest.spyOn(obj, 'method');
obj.method();
expect(obj.method).toHaveBeenCalled();

6. Giả lập module

jest.mock('./module');
const module = require('./module');
module.someFunc.mockReturnValue('mocked');

7. Test async/await

test('dùng async/await', async () => {
  const data = await fetchData();
  expect(data).toBeDefined();
});

test('Promise resolve', () => {
  return expect(fetchData()).resolves.toEqual('kết quả');
});

test('Promise reject', () => {
  return expect(fetchData()).rejects.toThrow('lỗi');
});

8. Giả lập thời gian (Timers)

jest.useFakeTimers();
jest.advanceTimersByTime(1000);
jest.runAllTimers();