Appearance
Skill / /znf:e2e
/znf:e2e
Quyết định và viết journey E2E Playwright chạy thật từ UI tới BE, khẳng định kết quả domain bằng API re-fetch, qua được zenify e2e lint.
Cách gọi
text
/znf:e2eKhi nào dùng
Khi một task có user flow đi qua UI và BE làm đổi trạng thái entity: tạo, sửa hoặc xóa ticket, deal, contact. Quyết định này đưa ra lúc lập plan trong /znf:cook. Không viết journey cho đổi chữ, đổi màu, refactor hoặc thay đổi chỉ ở FE không chạm dữ liệu.
Cách hoạt động
- Journey nằm ở
.znf/e2e/<journey>.spec.tstrong repo, config ở.znf/e2e/e2e.config.jsonvớiapiBaseUrl. Kit cấp sẵn fixturepageđã đăng nhập,apiClientđã xác thực vàcleanupTracker. - Mỗi test tự tạo dữ liệu qua API với marker duy nhất theo lượt chạy; chỉ flow cần kiểm đi qua trình duyệt. Sau khối UI có đúng một marker
// @domain-assert:<entity>, tiếp theo là một lầnapiClientđọc lại entity vàexpecttrên field thật. Cuối test đăng ký dọn dẹp qua API; dọn dẹp chạy cả khi test fail. zenify e2e lintfail khi thiếu marker hoặc re-fetch, có hai marker trong một scenario, dùngnetworkidlehoặcwaitForTimeout, dùng xpath,nth-childhoặc CSS cấu trúc, thiếu cleanup, hoặc header scenario không nhắcFR-haySC-.- Locator theo thứ tự cố định:
getByRole,getByLabel,getByPlaceholder,getByTextlà mặc định;getByTestIdchỉ khi phần tử nằm trong iframe hoặc shadow DOM, không có accessible name ổn định, hoặc label sinh từ i18n.
Ví dụ
bash
zenify e2e lint --repo <repo>
zenify e2e run --repo <repo> --port <N>Lưu ý
Harness đăng nhập một lần qua storageState, giữ trace khi test fail, và mặc định chạy tuần tự trên staging chung. Không dùng if hoặc try để che fail; assertion luôn là web-first và được await.