Skip to main content
Có nhiều cách khác nhau để kiểm thử một ứng dụng Inertia. Trang này cung cấp cái nhìn tổng quan nhanh về các công cụ hiện có.

Kiểm thử end-to-end

Một cách phổ biến để kiểm thử các JavaScript page component là dùng công cụ end-to-end như Cypress hoặc Pest. Đây là các công cụ tự động hóa trình duyệt, cho phép chạy những mô phỏng thực tế của ứng dụng ngay trong trình duyệt. Các test này thường chậm hơn; tuy nhiên, vì chúng kiểm thử ứng dụng ở cùng lớp mà người dùng cuối tương tác, chúng mang lại mức độ tin cậy cao rằng ứng dụng đang hoạt động đúng. Đồng thời, do test chạy trong trình duyệt, JavaScript của bạn cũng thực sự được thực thi và kiểm thử.

Unit test phía client

Một cách khác để kiểm thử page component là dùng client-side unit testing framework như Vitest, Jest hoặc Mocha. Cách này cho phép kiểm thử JavaScript page component độc lập bằng Node.js.

Kiểm thử endpoint

Ngoài kiểm thử page component JavaScript, bạn có thể cũng muốn kiểm thử các response Inertia do framework phía máy chủ trả về. Một cách phổ biến là dùng endpoint test, trong đó bạn gửi request đến ứng dụng và kiểm tra response. Laravel cung cấp công cụ để thực hiện loại test này. Tuy nhiên, để quá trình này dễ dàng hơn nữa, adapter Laravel của Inertia cung cấp thêm các công cụ HTTP testing. Hãy xem một ví dụ.
Như ví dụ trên, bạn có thể dùng các phương thức assertion này để kiểm tra nội dung dữ liệu được truyền vào response Inertia. Ngoài ra, bạn có thể assert dữ liệu mảng có độ dài nhất định cũng như giới hạn phạm vi assertion. Bạn có thể dùng phương thức inertiaProps để lấy các prop được trả về trong response. Có thể truyền một key để lấy thuộc tính cụ thể; các thuộc tính lồng nhau được hỗ trợ bằng ký pháp “dot”.
Hãy xem chi tiết phương thức assertInertia và các assertion có sẵn. Trước tiên, để xác nhận response Inertia có một thuộc tính, bạn có thể dùng phương thức has. Có thể xem phương thức này tương tự hàm isset của PHP.
Để assertion một Inertia property có số phần tử cụ thể, bạn có thể truyền expected size làm đối số thứ hai cho phương thức has.
Phương thức has cũng có thể được dùng để scope các property, giúp giảm lặp khi assert trên các property lồng nhau.
Khi scope vào các property Inertia là mảng hoặc collection, bạn cũng có thể assert số lượng item cụ thể đồng thời scope vào item đầu tiên.
Để assert một property Inertia có giá trị mong đợi, bạn có thể dùng assertion where.
Các phương thức testing của Inertia sẽ tự động fail nếu bạn chưa tương tác với ít nhất một prop trong một scope. Điều này nhìn chung hữu ích, nhưng đôi khi bạn làm việc với dữ liệu không ổn định (chẳng hạn từ feed bên ngoài), hoặc có dữ liệu bạn thực sự không muốn tương tác để giữ test đơn giản. Trong các trường hợp đó, hãy dùng phương thức etc.
Phương thức missing hoàn toàn đối lập với has, dùng để đảm bảo property không tồn tại. Phương thức này kết hợp rất tốt với etc.

Kiểm thử partial reload

Bạn có thể dùng reloadOnlyreloadExcept để kiểm thử cách ứng dụng phản hồi với partial reload. Các phương thức thực hiện follow-up request và cho phép assertion trên response.
Thay vì truyền một prop duy nhất dưới dạng chuỗi, bạn cũng có thể truyền một mảng prop vào reloadOnly hoặc reloadExcept.

Kiểm thử deferred props

Bạn có thể dùng loadDeferredProps để kiểm thử cách ứng dụng phản hồi với deferred props. Phương thức thực hiện follow-up request để tải deferred props và cho phép assertion trên response.
Bạn cũng có thể tải các nhóm deferred prop cụ thể bằng cách truyền tên nhóm làm đối số đầu tiên cho phương thức loadDeferredProps.
Thay vì truyền một nhóm duy nhất dưới dạng chuỗi, bạn cũng có thể truyền một mảng nhóm vào loadDeferredProps.

Kiểm thử flash data

Bạn có thể dùng hasFlashmissingFlash để kiểm thử flash data trong Inertia response.

Redirect response

Các phương thức hasFlashmissingFlash ở trên chỉ hoạt động với response của Inertia page đã render. Với redirect response, bạn có thể dùng trực tiếp assertInertiaFlashassertInertiaFlashMissing trên test response để assertion dữ liệu flash trong session.

Tắt SSR trong khi test

Ứng dụng có thể bật SSR cho development và production nhưng không cần trong testing. Bạn có thể đặt INERTIA_SSR_ENABLED thành false trong phpunit.xml để ngăn Laravel adapter dispatch SSR request.
Ngoài ra, có thể dùng phương thức Inertia::disableSsr() trong test base class.
Có thể truyền boolean hoặc closure để tắt SSR theo điều kiện. Việc này thường được gọi từ service provider.

Tài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v3 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.