| name | testing-jest-edge-case-testing |
| description | null |
Edge Case Testing
Category: testing-jest · Status: 🟢 Active
When to use
Khi cần phủ biên: boundary, null/empty, async lỗi, race condition.
Steps
- Boundary: 0, 1, max, vượt max, số âm, chuỗi rỗng/quá dài.
- Giá trị rỗng:
null, undefined, [], {}, '' — kiểm tra không crash.
- Async: test cả resolve và reject; assert thông báo lỗi/UI fallback.
- Race: nhiều thao tác đồng thời, request cũ trả về sau (stale), debounce.
- Dùng
it.each để chạy nhiều input biên gọn gàng.
Template
it.each([
['', 'Email là bắt buộc'],
['abc', 'Email không hợp lệ'],
])('input %s → lỗi %s', (input, msg) => {
expect(validateEmail(input)).toBe(msg);
});
it('hiển thị lỗi khi API thất bại', async () => {
(fetchData as jest.Mock).mockRejectedValue(new Error('fail'));
render(<List />);
expect(await screen.findByText(/đã có lỗi/i)).toBeInTheDocument();
});
Example
Good: phủ boundary + null/empty + reject + race, dùng it.each.
Avoid: chỉ test happy path, bỏ qua nhánh reject, không test giá trị rỗng.
Checklist