Làm cách nào để chạy thử nghiệm trong Laravel?

Phát triển dựa trên thử nghiệm [TDD] là một cách tiếp cận để phát triển phần mềm sử dụng môi trường thử nghiệm đầu tiên, nơi bạn viết các bài kiểm tra trước khi viết mã thích hợp để hoàn thành bài kiểm tra và sau đó tái cấu trúc. Đó là một cách để suy nghĩ về ứng dụng của bạn được yêu cầu hoặc thiết kế để làm gì trước khi bạn viết mã để xây dựng các chức năng. Bài viết này giới thiệu về thử nghiệm Ứng dụng Laravel bằng PHPUnit, khung thử nghiệm phổ biến nhất được thiết kế cho các nhà phát triển PHP. Hướng dẫn này cho bạn thấy lý do tại sao phát triển dựa trên thử nghiệm lại quan trọng trong các hoạt động hàng ngày cũng như cách bắt đầu viết thử nghiệm trong ứng dụng Laravel bằng PHPUnit,

Tại sao bạn nên viết bài kiểm tra cho ứng dụng của mình

Thử nghiệm là cần thiết bởi vì tất cả chúng ta đều mắc sai lầm. Một số sai lầm mắc phải trong quá trình phát triển không gây hậu quả nặng nề trong khi một số có xu hướng rất tốn kém hoặc nguy hiểm nếu bị bỏ qua. Ưu điểm của Test Driven Development đặt ra là rất nhiều, đây là một vài lý do tại sao cần phải thực hiện Test-Driven Development

  • TDD giúp tránh lỗi và lỗi khi giới thiệu các tính năng mới trong ứng dụng
  • Các quy trình dự án được thực hiện dễ dàng hơn để theo dõi trong môi trường dựa trên thử nghiệm
  • TDD giúp giảm bớt quá trình lập tài liệu phần mềm
  • TDD truyền cảm hứng cho sự tự tin khi viết mã
  • Lỗi dễ phát hiện và sửa chữa hơn trong môi trường nơi các bài kiểm tra được viết

điều kiện tiên quyết

Hướng dẫn này giả định rằng bạn có những điều sau đây

  • Kiến thức trung cấp về Laravel và phát triển web nói chung
  • Môi trường phát triển tương thích với Laravel đã cài đặt Composer

Giới thiệu PHPUnit

PHPUnit là một khung tập trung vào nhà phát triển để thử nghiệm các ứng dụng được xây dựng bằng PHP và nhiều khung của nó. PHPUnit được xây dựng theo kiến ​​trúc xUnit cho các khung kiểm tra đơn vị

Laravel được xây dựng với mục đích thử nghiệm và do đó, PHPUnit là một tiện ích thử nghiệm được bao gồm theo mặc định trong bản cài đặt mới của Laravel, do đó không cần phải trải qua quá nhiều rắc rối trong việc thiết lập môi trường thử nghiệm. Tất cả những gì bạn cần làm là đảm bảo các giá trị mặc định [thường là tốt để sử dụng] được sửa đổi theo sở thích của bạn. Ví dụ: bạn có thể cần có một trình điều khiển cơ sở dữ liệu khác cho nhu cầu thử nghiệm của mình

Bắt đầu

Ứng dụng Laravel demo của chúng tôi sẽ là một API quản lý tác vụ đơn giản cho phép người dùng tạo các tác vụ và xóa chúng khi cần thiết. Để bắt đầu, hãy tạo và điều hướng đến một dự án Laravel mới bằng cách sử dụng trình soạn thảo bằng cách chạy

nhà soạn nhạc tạo dự án laravel-thử nghiệm ứng dụng

Định cấu hình cơ sở dữ liệu thử nghiệm

Khi thử nghiệm, sẽ rất thuận tiện khi thiết lập cơ sở dữ liệu thử nghiệm vì bạn không muốn chạy thử nghiệm đối với cơ sở dữ liệu thực tế của mình và do đó, chúng tôi sẽ sử dụng cơ sở dữ liệu SQLite trong bộ nhớ để giúp mọi thứ đơn giản và nhanh chóng

Để định cấu hình SQLite làm cơ sở dữ liệu thử nghiệm của bạn, hãy mở phpunit. xml và bỏ ghi chú các dòng mã sau khỏi tệp

Chạy thử nghiệm

Để chạy thử nghiệm bằng đơn vị PHP trong Ứng dụng Laravel của bạn, hãy điều hướng đến thư mục gốc của dự án và chạy lệnh /vendor/bin/phpunit hoặc lệnh php artisan test. Ngoài ra, bạn có thể tạo bí danh tùy chỉnh [composer test] bằng cách thêm "test": "vendor/bin/phpunit" vào đối tượng tập lệnh trong tệp composer.json của dự án của bạn như được minh họa trong khối mã bên dưới

"Chiếu sáng\\Foundation\\ComposerScripts. postAutoloadDump",

"Gói thủ công @php. khám phá --ansi"

"kiểm tra". "nhà cung cấp/bin/phpunit",

"post-root-gói-cài đặt". [

"@php -r \"file_exists['. env']. sao chép ['. env. thí dụ', '. env'];\""

"hậu tạo-dự án-cmd". [

"khóa nghệ nhân @php. tạo --ansi"

Khi bạn chạy thử nghiệm ban đầu do Laravel viết trước bằng cách sử dụng lệnh php artisan test hoặc composer test, bạn sẽ nhận được kết quả tương tự như ảnh chụp màn hình bên dưới

Các bài kiểm tra Laravel mặc định vượt qua

Đầu ra ở trên cho chúng ta biết rằng hai bài kiểm tra mặc định. chạy thử nghiệm một đơn vị và một tính năng đã chạy và vượt qua thành công

Hãy phân tích bất kỳ tệp ExampleTest.php nào trong các đơn vị Tiến hành xóa các tệp ExampleTest.php trong cả thư mục Tính năng và Đơn vị trong thư mục kiểm tra của chúng tôi vì chúng tôi sẽ sớm tạo các bài kiểm tra của riêng mình

Như đã giải thích ở trên, dự án demo của chúng tôi là một ứng dụng quản lý tác vụ đơn giản với các yêu cầu sau

  • Tuyến đường /api/tasks/create chấp nhận yêu cầu POST để tạo tác vụ
  • Điểm cuối php artisan test0 đánh dấu một nhiệm vụ nhất định là hoàn thành
  • Điểm cuối php artisan test1 cuối cùng xóa tác vụ đã cho khỏi cơ sở dữ liệu

Bây giờ chúng ta đã có các yêu cầu rõ ràng, hãy tiến hành viết các bài kiểm tra phù hợp để đảm bảo API của chúng ta thực hiện điều đó

Tạo một tệp thử nghiệm có tên php artisan test2  bằng cách chạy

nghệ nhân php làm. kiểm tra InsertionTest

Bên trong tệp này, xóa nội dung của phương thức php artisan test3 mặc định và thay vào đó thêm phương thức sau

hàm công khai test_that_a_task_can_be_added[]

$this->withoutExceptionHandling[];

$response = $this->post['/api/tasks/create', [

'description' => 'Viết và xuất bản một bài báo'

$response->assertStatus[201];

$this->assertTrue[count[Tác vụ. tất cả []] > 1];

Hãy chạy qua những gì đoạn mã trên làm

php artisan test4 yêu cầu PHPUnit không xử lý các ngoại lệ mà chúng tôi có thể nhận được. Điều này là để vô hiệu hóa xử lý ngoại lệ của Laravel để ngăn Laravel xử lý các ngoại lệ xảy ra thay vì loại bỏ nó, chúng tôi làm điều này để có thể nhận được báo cáo lỗi chi tiết hơn trong đầu ra thử nghiệm của mình

php artisan test5 thực hiện yêu cầu POST tới điểm cuối php artisan test6 với các giá trị được cung cấp trong mảng

php artisan test7 hướng dẫn PHPUnit xác nhận rằng mã trạng thái HTTP được trả về từ yêu cầu bài viết là 201 i. tài nguyên điện tử được tạo

Tiếp theo, chúng tôi sử dụng phương pháp php artisan test8 để xác nhận rằng tác vụ đã thực sự được lưu trong cơ sở dữ liệu

Khi chạy thử nghiệm với php artisan test, chúng tôi nhận được phản hồi sau vì thử nghiệm của chúng tôi không thành công như mong đợi

Chúng tôi nhận được một ngoại lệ 404 không tìm thấy

Kết quả kiểm tra [với khả năng xử lý ngoại lệ bị vô hiệu hóa] cho chúng tôi biết rằng các kiểm tra của chúng tôi không thành công vì yêu cầu POST được gửi tới composer test0 đã ném NotFoundException vì không thể tìm thấy tuyến đường

Hãy khắc phục điều đó bằng cách đăng ký tuyến đường trong tệp composer test1 của dự án của chúng tôi

Tuyến đường. nhóm [['tiền tố' => 'tác vụ'], hàm [] {

Tuyến đường. get['/{task}','TaskController@show'];

Tuyến đường. post['/create', 'TaskController@create_task'];

Tuyến đường. patch['{task}/complete', 'TaskController@mark_task_as_completed'];

Tuyến đường. xóa['/{id}', 'TaskController@destroy'];

Khi chạy thử nghiệm thêm, chúng tôi nhận được lỗi sau cho chúng tôi biết rằng không thể tìm thấy mô hình/lớp nội tuyến 24 của composer test2. Điều này là do chúng tôi chưa tạo lớp

Tất cả các bài kiểm tra vượt qua thành công ngay bây giờ

Hãy tạo lớp Nhiệm vụ và quá trình di chuyển, nhà máy và bộ điều khiển tương ứng của nó bằng cách chạy composer test3 Nhiệm vụ -a, sau đó nhập lớp đã tạo bằng cách thêm “ composer test4 ” vào đầu InsertionTest của chúng ta. tập tin php

Khi chạy thử nghiệm một lần nữa, chúng tôi nhận được kết quả cho biết không thể tìm thấy bảng nhiệm vụ, điều này được mong đợi vì chúng tôi không tạo và chạy các di chuyển

Hãy tạo bảng và chạy quá trình di chuyển của chúng ta bằng cách thêm quá trình di chuyển sau vào phương thức composer test5 trong tệp di chuyển composer test6

Lược đồ. tạo ['nhiệm vụ', chức năng [Bản thiết kế $table] {

$bảng->văn bản['mô tả'];

$table->boolean['completed']->default[0];

Tiếp theo, sửa đổi tệp composer test7 của bạn để cho phép các trường tên, mô tả và trạng thái có thể gán hàng loạt bằng cách thêm chúng vào mảng có thể điền như vậy

được bảo vệ $fillable = ['tên', 'mô tả', 'trạng thái'];

Khi chạy các bài kiểm tra mà chúng tôi đã viết cho đến nay, bạn sẽ thấy chúng không thành công như mong đợi

Kiểm tra xem một Tác vụ có thể bị xóa không

Để kiểm tra xem một tác vụ có thể bị xóa hay không, chúng tôi sẽ tạo một số tác vụ giả và cố gắng xóa chúng khỏi cơ sở dữ liệu. Chúng ta có thể tạo các tác vụ giả bằng cách sử dụng các nhà máy của laravel như bên dưới

định nghĩa hàm công khai []

'name' => $this->faker->sentence[4],

'mô tả' => $this->faker->sentence[20],

'hoàn thành' => random_int[0, 1]

Bài kiểm tra của chúng ta sẽ như thế này

hàm công khai test_that_a_task_can_be_deleted[]

$this->withoutExceptionHandling[];

Nhiệm vụ. factory[]->times[5]->create[];

$id_to_be_deleted = random_int[1, 5];

$this->delete["/api/tasks/$id_to_be_deleted/"];

$this->assertDatabaseMissing['tasks', ['id' => $id_to_be_deleted]];

Như mong đợi, bài kiểm tra thất bại. Hãy viết mã tương ứng để vượt qua bài kiểm tra

chức năng công khai hủy[$task]

$task_to_be_deleted = Nhiệm vụ. findOrFail[$tác vụ];

$task_to_be_deleted->delete[];

'tin nhắn' => 'tác vụ đã xóa thành công'

Kiểm tra rằng một Nhiệm vụ có thể được đánh dấu là đã hoàn thành

Để kiểm tra xem các tác vụ có thể được đánh dấu là đã hoàn thành hay không, chúng ta cần tạo một tác vụ thử nghiệm và sau đó thực hiện yêu cầu PATCH tới điểm cuối chịu trách nhiệm về tác vụ đó

hàm công khai test_that_a_task_can_be_completed[]{

$this->withoutExceptionHandling[];

'description' => 'Demo description'

]]->id;

$response = $this->patch["/api/tasks/$task_id/complete"];

$this->assertTrue[Tác vụ. findOrFail[$task_id]->is_completed[] == 1];

'message' => 'tác vụ được đánh dấu là đã cập nhật thành công'

], thật];

$response->assertStatus[200];

Như dự kiến, các thử nghiệm của chúng tôi không thành công, hãy thêm các phương thức sau vào mô hình Tác vụ để mô hình của chúng tôi có thể đánh dấu các tác vụ là đã hoàn thành

chức năng công khai mark_task_as_completed[]

hàm công khai is_completed[]

Cuối cùng, thêm mã tương ứng vào bộ điều khiển

// Ứng dụng/Http/Bộ điều khiển/Trình điều khiển tác vụ. php

hàm công khai mark_task_as_completed[Tác vụ $task]

$task->mark_task_as_completed[]; . tập tin php

'message' => 'tác vụ được đánh dấu là đã cập nhật thành công'

], 200];

Khi chúng tôi chạy thử nghiệm ngay bây giờ, chúng tôi sẽ vượt qua tất cả chúng như mong đợi. Nếu một bản cập nhật được thực hiện cho cơ sở mã, các bài kiểm tra sẽ được viết và chạy để đảm bảo ứng dụng của chúng tôi vẫn còn nguyên vẹn

Đọc thêm

Chúng tôi chắc chắn đã đề cập rất nhiều trong hướng dẫn này. Chúng tôi đã bắt đầu bằng cách thiết lập và chạy dự án của mình bằng trình soạn nhạc. Sau đó, chúng tôi đã định cấu hình PHPUnit để sử dụng tệp SQLIte cục bộ cho các bài kiểm tra liên quan đến cơ sở dữ liệu. Cuối cùng, chúng tôi đã viết thử nghiệm của riêng mình để đảm bảo rằng API của chúng tôi sẽ hoạt động theo cách chúng tôi mong đợi

Mặc dù chúng tôi đã đề cập rất nhiều nhưng đây chỉ là phần nổi của tảng băng PHPUnit. Để tiếp tục tìm hiểu về kiểm thử ứng dụng Laravel, tôi khuyên bạn nên xem khóa học kiểm thử Laravel của Jeffery Way trên Laracasts. Một tài nguyên tuyệt vời khác là Laravel testing docs

Nếu bạn muốn tìm hiểu thêm về cách sử dụng PHPUnit, vui lòng xem tài liệu chính thức cũng như bảng tóm tắt các tiện ích và chức năng phổ biến của PHPUnit tại đây

Thử nghiệm trong Laravel là gì?

Trong Laravel, có hai cách để kiểm tra ứng dụng của bạn. Một là với Kiểm tra đơn vị trong khi một là với Kiểm tra tính năng. Kiểm tra đơn vị cho phép kiểm tra mô hình lớp, bộ điều khiển, v.v. trong khi kiểm tra Tính năng cho phép bạn kiểm tra cơ sở mã của mình .

TestCase trong Laravel là gì?

Trường hợp thử nghiệm. php. Trường hợp thử nghiệm. php là tệp bootstrap để thiết lập môi trường Laravel trong các thử nghiệm của chúng tôi . Điều này cho phép chúng tôi sử dụng các mặt tiền của Laravel trong các thử nghiệm và cung cấp khuôn khổ cho những người trợ giúp thử nghiệm mà chúng tôi sẽ xem xét ngay sau đây.

TDD trong Laravel là gì?

Ngày 24 tháng 10 năm 2022. TDD là viết tắt của phát triển dựa trên thử nghiệm , một phương pháp viết mã tập trung vào thử nghiệm. Trước khi bạn viết bất kỳ mã nào cho ứng dụng của mình, bạn sẽ bắt đầu bằng một bài kiểm tra. Đây là một cách tiếp cận khá khó khăn ban đầu, nhưng nó mang lại cho bạn nhiều thứ hơn là chỉ có nhiều bài kiểm tra hơn.

Kiểm tra PHPUnit là gì?

PHPUnit là khung thử nghiệm đơn vị cho ngôn ngữ lập trình PHP . Đây là một ví dụ về thiết kế xUnit cho các hệ thống thử nghiệm đơn vị bắt đầu với SUnit và trở nên phổ biến với JUnit. Ngay cả một dự án phát triển phần mềm nhỏ cũng thường mất hàng giờ làm việc chăm chỉ.

Chủ Đề