Testing in Laravel

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ục tests 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ệnh phpunit 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ầu GET vào ứng dụng. Phương thức see khẳng định rằng có một đoạn text xuất hiện trong ứng dụng. Phương thức dontSee 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ầu GET 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.

Capture.PNG

  • 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ầu POST 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