Mối quan hệ thử nghiệm đơn vị Laravel cho mô hình

Tram Ho

Lời mở đầu

Trong quá trình phát triển dự án một điều mà chúng ta thường xuyên bỏ qua và ít khi để ý đó là kiểm soát lỗi hệ thống của chúng ta. Nhưng theo năm tháng ứng dụng của chúng ta ngày càng lớn, càng nhiều module được phát triển thì việc kiểm soát lỗi là vô cùng quan trọng. Khi nhận được yêu cầu thay đổi từ khách hàng chúng ta lại cuống cuồng vào đọc code và sửa lại những đoạn code trước đó. Tuy nhiên đoạn code đó được sử dụng ở khá nhiều nơi, sửa chỗ này lại toang chỗ kia =)). Vậy làm sao để kiểm soát được sửa dòng này thì những chỗ nào sẽ toang? có ảnh hưởng gì tới những chỗ khác không? Nếu dự án của bạn nhỏ thì không vấn đề gì những cứ tưởng tượng dự án của bạn khá lớn, mỗi tháng khách hàng trả cho bạn 100 tỏi và hiện tại đang có vài triệu người dùng thì chắc hẳn dự án của bạn cũng khá lớn rồi đấy. Sửa 1 dòng code thôi là ăn ngay incident như chơi. :v Vậy đấy, những lúc như vậy Unit Test sẽ phát huy tác dụng cực kì. Và hôm nay mình sẽ hướng dẫn các bạn viết test relationship trong model.

Nhìn lại xem 1 vài quan hệ phổ biến trong Laravel để chúng ta viết test cho nó nhé:

  • One to One
  • One to Many
  • Many to Many
  • Polymorphic Relations
  • Many To Many Polymorphic Relations

Ok, hãy cùng bắt đầu thôi.

1. Quan hệ One to One (Quan hệ một – một)

Ví dụ chúng ta có Model User quan hệ một một với Product

hasOne()

Chúng ta sẽ viết test như sau:

Giải thích:
Ở đây chúng ta dùng factory tạo ra 1 user và 1 product cho user đó.
Nếu $user->product trả về một instance của Product thì như vậy là đúng. Hoặc $user->product->count() trả về 1 là đúng vì một user chỉ có một product.

Định nghĩa ngược lại belongsTo()

Chúng ta sẽ viết test như sau:

 

Note: Từ phiển bản 5.8 trở lên Laravel đã sửa hàm getForeignKey() thành getForeignKeyName() rồi nhé.

2. Quan hệ One to Many (Quan hệ một nhiều)

hasMany()

Ví dụ chúng ta có Model User quan hệ một nhiều với Product

hasOne()

Chúng ta sẽ viết test như sau:

 

Định nghĩa quan hệ ngược lại là belongsTo

Xem ở bên trên mình đã viết rồi nhé. 😄

3. Quan hệ Many to Many (Quan hệ nhiều nhiều)

Ví dụ: Chúng ta có model Book quan hệ nhiều nhiều với Category

Chúng ta sẽ viết test như sau:

4. Quan hệ Polymorphic Relations (Quan hệ đa hình)

4.1 Quan hệ One One

Ví dụ: Chúng ta có bảng post và product quan hệ với bảng image như sau. Bảng image sẽ lưu hình ảnh của post và product

Và model của chúng sẽ như sau:

Vậy là chúng ta sẽ cần test 2 relation là morphTomorphOne()

morphTo()

morphOne()

4.2 Quan hệ One Many

Ví dụ: Chúng ta có 4 bảng là: post, product và comment. Quan hệ của chúng như sau:

Và model của chúng sẽ như sau:

Vậy là chúng ta sẽ cần test 1relation là morphOne(). morphTo thì đã viết ở trên rồi.
Cũng tương tự như trên chúng ta làm như sau:

4.3 Quan hệ Many Many

Giả sử chúng ta có bảng tag sử dụng cho cả post và product.

Cấu trúc model sẽ như sau:

Như vậy chúng ta sẽ cần test 2 relation là morphToMany()morrphedByMany()

morphToMany():

Tương tự như quan hệ nhiều nhiều chúng ta sẽ test như sau:

morphedByMany():

Vậy là xong. Khá dễ dàng. 😄
Trong dự án chúng ta nên viết 1 file model test case chung và khi test model nào chúng ta extend từ file đó và chỉ cần gọi những function viết test mà chúng ta đã viết sẵn ra là xong.
Ví dụ:

Trên đây là cách viết test relationship cho model trong Laravel. Bài viết sau mình sẽ viết test cho controller, service và repository. Cảm ơn bạn đã đọc bài của mình.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo