PhpUnit Testing in Laravel 5.4 (P1)
Bài đăng này đã không được cập nhật trong 7 năm
- Introduction
Laravel được xây dựng với sự kiểm tra. Trên thực tế, hỗ trợ thử nghiệm với PHPUnit được đưa ra ngoài và tệp phpunit.xml
đã được thiết lập cho ứng dụng của bạn. Khung này cũng được vận chuyển với các phương pháp trợ giúp thuận tiện cho phép bạn kiểm tra ứng dụng của mình.
Một tệp ExampleTest.php
được cung cấp trong thư mục tests
. Sau khi cài đặt một ứng dụng Laravel mới, chỉ cần chạy phpunit
trên dòng lệnh để chạy thử nghiệm của bạn.
- Enviroment
Khi chạy tests, Laravel sẽ tự động thiết lập môi trường cấu hình để kiểm tra. Laravel tự động cài đặt session
và cache
cho trình điều khiển mảng trong khi testing
, có nghĩa là không có sessions
hoặc cache
sẽ tiếp tục tồn tại trong khi test.
Bạn được tự do định nghĩa các giá trị cấu hình môi trường thử nghiệm khác nếu cần. Các biến môi trường thử nghiệm có thể được cấu hình trong tệp phpunit.xml
, nhưng hãy chắc chắn xóa bộ nhớ cache
cấu hình bằng lệnh config: clear
bằng command trước khi chạy thử nghiệm của bạn!
- Creating & Running Tests
Để tạo một test case, chúng ta sử dụng bằng lệnh command make:test
:
php artisan make:test UserTest
Lệnh command này sẽ tạo class UserTest
trong thư mục tests
. Sau đó bạn có thể xác định các phương pháp thử như bạn thường sẽ sử dụng PHPUnit. Để chạy thử nghiệm của bạn, chỉ cần thực hiện lệnh phpunit
từ terminal của bạn:
<?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);
}
}
Nếu bạn xác định phương thức setUp của riêng bạn trong một lớp kiểm tra, hãy chắc chắn gọi parent :: setUp
.
- Testing for Application
Laravel cung cấp một API rất thông thạo để làm cho các yêu cầu HTTP vào ứng dụng của bạn, kiểm tra đầu ra và thậm chí điền vào biểu mẫu. Ví dụ, hãy xem thử nghiệm được xác định dưới đây:
<?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 get
sẽ GET
yêu cầu vào ứng dụng. Phương thức See
xác nhận rằng chúng ta sẽ thấy văn bản đã cho trong phản hồi trả về bởi ứng dụng. Phương thức dontSee
khẳng định rằng các văn bản nhất định không được trả lại trong phản ứng ứng dụng. Đây là ứng dụ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
để GET
request thông qua route :
$this->visitRoute('profile');
$this->visitRoute('profile', ['user' => 1]);
- Tương tác với ứng dụng của bạn :
Ví dụ chúng ta có link
:
<a href="/about-us">About Us</a>
Bây giờ chúng ta sẽ viết test mà khi click vào link và asserts kết quả vs page :
public function testBasicExample()
{
$this->visit('/')
->click('About Us')
->seePageIs('/about-us');
}
Bạn cũng có thể kiểm tra xem user đã đi đúng đến route chưa bằng method seeRouteIs
->seeRouteIs('profile', ['user' => 1]);
- Tương tác với Forms :
Laravel cung cấp nhiều phương thức để test form. Phương thức
type
,select
,check
,attach
vàpress
cho phép tương tác với đầu vào 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 test đề kiểm tra form và so sánh kết quả :
public function testNewUserRegistration()
{
$this->visit('/register')
->type('Taylor', 'name')
->check('terms')
->press('Register')
->seePageIs('/dashboard');
}
Tất nhiên , nếu form của bạn chứa đầu vào như radio buttons hoặc drop-down . Bạn cũng có thể dễ dàng điền vào các loại trường đó. Dưới đây là danh sách của mỗi phương pháp thao tác hình thức:
$this->type($text, $elementName)
$this->select($value, $elementName)
$this->check($elementName)
$this->uncheck($elementName)
$this->attach($pathToFile, $elementName)
$this->press($buttonTextOrElementName)
- File Inputs
Nếu form của bạn có chứa file
inputs, bạn có thể sử dụng phương thức attach
:
public function testPhotoCanBeUploaded()
{
$this->visit('/upload')
->attach($pathToFile, 'photo')
->press('Upload')
->see('Upload Successful!');
}
- Testing JSON APIs :
Laravel cũng cũng cấp nhiều helpers để testing JSON APIs và responses của chúng . Ví dụ các methods json
, get
, post
, put
, patch
và delete
. Ví dụ :
<?php
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->json('POST', '/user', ['name' => 'Sally'])
->seeJson([
'created' => true,
]);
}
}
Xác minh kết quả :
Nếu bạn muốn xác minh kết quả đối với JSON trả về bởi ứng dụng , bạn nên sử dụng method 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,
]);
}
}
Tài liệu tham khảo : https://laravel.com/docs/5.3/application-testing
All rights reserved