+1

PhpUnit Testing in Laravel 5.4 (P1)

  1. 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.

  1. 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 sessioncache 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!

  1. 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.

  1. 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, attachpress 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, patchdelete. 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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí