Testing in Laravel
Bài đăng này đã không được cập nhật trong 3 năm
I. Tổng quan
-
Testing trong Larvel được hỗ trợ bởi PhpUnit test bao gồm một thư mục tests và một file cấu hình phpunit.xml.
-
Thư mục tests là thư mục mặc định dùng để viết code cho việc test, bạn có thể đổi sang thư mục khác nếu muốn bằng cách cấu hình trong file phpunit.xml.
-
Một file Exampletest.php được cung cấp trong file tests. Sau khi cài đặt một ứng dụng Laravel mới, đơn giản chỉ cần chạy câu lệnh
phpunit
để chạy thử nghiệm của bạn.
II. Môi trường
-
Khi chạy tests, Laravel sẽ tự động cấu hình môi trường để
tessting
.Laravel tự động cấu hình session và cache to the array driver while testing, nghĩa là không có dữ liệu session hoặc cache sẽ được tiếp tục tồn tại trong testing. -
Bạn tự do định nghĩa giá trị cấu hình môi trường test khác khi cần thiết. Các biến trong môi trường test có thể được cấu hình trong file phpunit.xml, nhưng chắc chắn rằng để xóa cấu hình cache bằng cách sử dụng
config:clear
trước khi chạy test của bạn.
III. Creating and running tests.
- Để tạo một test case mới, sử dụng câu lệnh sau:
php artisan make:test UserTest
- Câu lệnh này sẽ tạo một class mới
UserTest
trong thư mụctests
của bạn. Sau đó bạn có thể định nghĩa phương thức test như bạn vẫn thường sử dụng trong PhpUnit. Để chạy thử nghiệm của bạn, bạn chỉ cần chạy câu lệnhphpunit
trong terminal của bạn. Class UserTest như sau
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class UserTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testExample()
{
$this->assertTrue(true);
}
}
IV. Application Testing
1. Giới thiệu
- Laravel cung cấp một API rất thông dụng cho việc thực hiện các yêu cầu HTTP từ ứng dụng của bạn, để kiểm tra đầu vào, thậm chí là điền vào các mẫu đơn. Ví dụ:
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->visit('/')
->see('Laravel 5')
->dontSee('Rails');
}
}
-
Phương thức
visit
tạo một yêu cầuGET
vào ứng dụng. Phương thứcsee
khẳng định rằng có một đoạn text xuất hiện trong ứng dụng. Phương thứcdontSee
cũng khẳng định rằng có một đoạn text không được xuất hiện trong ứng dụng. Đây là những thử nghiệm cơ bản nhất có sẵn trong Laravel. -
Bạn cũng có thể sử dụng phương thức
visitRoute
để tạo một yêu cầuGET
thông qua
$this->visitRoute('profile');
$this->visitRoute('profile', ['user' => 1]);
2. Interacting With Your Application
a. Interacting With Links
- Trong thử nghiệm này chúng ta sẽ tạo một yêu cầu tới ứng dụng,
click
vào một liên kết và phản hồi trở lại, ví dụ
<a href="/about-us">About Us</a>
- Bây giờ, chúng ta viết thử nghiệm cho vấn đề trên như sau:
public function testBasicExample()
{
$this->visit('/')
->click('About Us')
->seePageIs('/about-us');
}
b. Interacting With Forms
- Laravel cũng cung cấp một số phương thức cho việc kiểm tra form. Các phương thức type, select, check, attach, và press cho phép bạn tương tác với tất cả các yếu tố đầu vào của form. Ví dụ:
<form action="/register" method="POST">
{{ csrf_field() }}
<div>
Name: <input type="text" name="name">
</div>
<div>
<input type="checkbox" value="yes" name="terms"> Accept Terms
</div>
<div>
<input type="submit" value="Register">
</div>
</form>
- Chúng ta có thể viết thực nghiệm cho vấn đề trên như sau:
{
$this->visit('/register')
->type('Taylor', 'name')
->check('terms')
->press('Register')
->seePageIs('/dashboard');
}
- Tất nhiên nếu đầu vào của bạn bao gồm các đầu vào khác như radio buttons or drop-down boxes bạn có thể dễ dàng kiểm thử chúng.
- File Inputs: nếu trong form của bạn có bao gồm input file, bạn có thể thực hiện thử nghiệm như sau:
public function testPhotoCanBeUploaded()
{
$this->visit('/upload')
->attach($pathToFile, 'photo')
->press('Upload')
->see('Upload Successful!');
}
c. Testing JSON APIs
- Laravel cũng cung cấp một số helpers cho việc thử nghiệm JSON APIs và các phản hồi của chúng. Ví dụ, các phương thức
json, get, post, put, patch, và delete
có thể sử dụng để các vấn đề yêu cầu với những HTTP khác nhau. Bạn cũng có thể dễ dàng truyền dự liệu và tiêu đề cho các phương pháp này. Để bắt đầu chúng ta viết một bài test thực hiện yêu cầuPOST
tới/user
và khẳng định các giá trị kỳ vọng được trả về.
<?php
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->json('POST', '/user', ['name' => 'Sally'])
->seeJson([
'created' => true,
]);
}
}
d. Verifying Exact Match
- Nếu bạn muốn biết chính xác giá trị trả về từ JSON, bạn nên sử dụng phương thức
seeJsonEquals
.
<?php
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->json('POST', '/user', ['name' => 'Sally'])
->seeJsonEquals([
'created' => true,
]);
}
}
Phần tiếp theo sẽ được caapfj nhật trong bài gần nhất. Link tài liệu tham khảo: https://laravel.com/docs/5.3/testing
All rights reserved