Factory hơn fixture cứng trong hầu hết trường hợp.
Fixture kiểu một file JSON dùng chung cho cả trăm test sẽ dần bị "ai cũng thêm một trường" và không test nào dám sửa vì sợ hỏng test khác. Factory là hàm tạo bản ghi hợp lệ với giá trị mặc định, cho phép ghi đè đúng trường mà test đó quan tâm:
const order = makeOrder({ status: 'pending', total: 500_000 })
// các trường khác lấy mặc định — người đọc biết ngay chỉ 2 trường này liên quanDọn dữ liệu — ba cách, theo thứ tự ưu tiên:
1. Transaction rollback: mỗi test chạy trong một transaction rồi rollback ở afterEach. Nhanh nhất, sạch tuyệt đối. Không dùng được nếu code dưới test tự quản lý transaction.
2. Truncate các bảng trong beforeEach. Đơn giản, chậm hơn, cần đúng thứ tự khoá ngoại (hoặc TRUNCATE ... CASCADE).
3. Dữ liệu tách biệt theo test: mỗi test dùng tenant/user riêng, không xoá gì cả. Hợp khi chạy song song.
Hai điều cần tránh: dựa vào dữ liệu do test khác tạo (test chỉ pass khi chạy đúng thứ tự), và dùng chung DB với dev (ai đó chạy test là mất dữ liệu đang debug). Luôn dùng DB riêng cho test, tốt nhất là container dựng lên trong CI.