Advertisement
  1. Code
  2. Testing

Lập trình với Yii2: Kiểm tra tự động với Codeception

Scroll to top
Read Time: 17 min
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

() translation by (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Nếu bạn đang hỏi "Yii là gì?", thì hãy xem hướng dẫn trước của tôi Introduction to the Yii framework - để biết được lợi ích của Yii và tổng quan có gì mới ở Yii 2.0, phát hành vào tháng 10 2014.

Trong loạt bài Programming with Yii2 - Lập trình cùng Yii2, tôi hướng dẫn các bạn sử dụng framework Yii2 của PHP. Trong hướng dẫn này, tôi sẽ khám phá chủ đề test tự động bằng Codeception, được tích hợp với framework Yii2.

Phải thừa nhận rằng, kinh nghiệm viết về tests của tôi thực sự hiếm hoi. Tôi thường tham gia các dự án một mình hoặc quy mô nhỏ với nguồn lực hạn chế. Trong suốt thời gian làm việc tại Microsoft, chúng tôi có những đội ngũ test riêng biệt đảm nhậm việc này. Nhưng thẳng thắn mà nói điều này có thể là điển hình với cả bạn quá, phải không? Các lập trình viên thích code, họ không viết test - ít nhất là các lập trình viên ngày xưa không làm thế.

Codeception là một thư viện đầy sáng tạo theo nghĩa đen nhằm mục đích làm cho các bài test viết vui vẻ và dễ dàng. Và tôi muốn nói rằng họ đã thành công ở mức độ vừa phải. Khi tôi thận trọng bắt đầu trải nghiệm vào hồ nước của Codeception, thật sự dễ dàng và thú vị. Tuy nhiên, khi tôi bắt đầu đi tiến xa hơn, tôi đã gặp phải vấn đề về cấu hình với Yii và các mô-đun cụ thể được sử dụng trong loạt bài này. Chắc chắn có những thách thức. Nhìn chung, dù tôi rất ấn tượng và nhìn thấy lợi ích của việc học hỏi nhiều hơn.

Đơn giản mà nói, Codeception và tích hợp của nó với Yii khiến tôi muốn viết test nhiều hơn. Tôi hoài nghi bạn sẽ có một trải nghiệm tương tự.

Một nhắc nhở nhỏ trước khi chúng ta bắt đầu, tôi luôn tham gia vào các chủ đề bình luận phía dưới. Tôi đặc biệt hứng thú nếu bạn có suy nghĩ hoặc muốn đề xuất các chủ đề cho hướng dẫn trong tương lai. Nếu bạn có câu hỏi hoặc chủ đề đề xuất, xin vui lòng đăng ở bên dưới. Bạn cũng có thể liên hệ trực tiếp với tôi trên Twitter @reifman.

Bắt đầu nào

Cài đặt Codeception

Tôi đã sử dụng tài liệu Yii's Testing Environment Setup - Hướng dẫn cài đặt môi trường test của Yii. Tôi bắt đầu với bản cài đặt toàn cục của codeception để tôi có thể sử dụng nó cho bất kỳ dự án nào.

1
$ composer global require "codeception/codeception=2.1.*"
2
Changed current directory to /Users/Jeff/.composer
3
./composer.json has been updated
4
Loading composer repositories with package information
5
Updating dependencies (including require-dev)
6
  - Installing symfony/yaml (v3.1.1)
7
    Loading from cache
8
...
9
codeception/codeception suggests installing symfony/phpunit-bridge (For phpunit-bridge support)
10
Writing lock file
11
Generating autoload files

Bạn cũng cần có codeception/specify:

1
$ composer global require "codeception/specify=*"
2
Changed current directory to /Users/Jeff/.composer
3
./composer.json has been updated
4
Loading composer repositories with package information
5
Updating dependencies (including require-dev)
6
composer require "codeception/verify=*"
7
  - Installing codeception/specify (0.4.3)
8
    Downloading: 100%         
9
10
Writing lock file
11
Generating autoload files

codeception/verify:

1
$ composer require "codeception/verify=*"
2
./composer.json has been updated
3
Loading composer repositories with package information
4
Updating dependencies (including require-dev)
5
  - Installing codeception/verify (0.3.0)                  
6
    Downloading: 100%         
7
8
Writing lock file
9
Generating autoload files

Tiếp theo, nó giúp thiết lập alias cho codecept bằng cách sử dụng thư mục toàn cục composer:

1
$ composer global status
2
Changed current directory to /Users/Jeff/.composer
3
No local changes

Phần này thiết lập alias:

1
$ alias codecept="/Users/Jeff/.composer/vendor/bin/codecept"

Yii cũng cần cài đặt Faker để tạo dữ liệu giả để test ứng dụng của bạn:

1
$ composer require --dev yiisoft/yii2-faker:*
2
./composer.json has been updated
3
Loading composer repositories with package information
4
Updating dependencies (including require-dev)
5
Nothing to install or update                               
6
Generating autoload files

Thiết lập Codeception với ứng dụng của bạn

Codecept bootstrap khởi tạo codeception cho ứng dụng Yii của bạn. Lệnh này tạo ra một loạt các file cấu hình để xây dựng và chạy test đối với ứng dụng của bạn. Chúng tôi đang sử dụng ứng dụng Hello từ loạt bài này. Xem liên kết GitHub trên trang này để lấy code.

1
$ codecept bootstrap
2
 Initializing Codeception in /Users/Jeff/Sites/hello 
3
4
File codeception.yml created       <- global configuration
5
tests/unit created                 <- unit tests
6
tests/unit.suite.yml written       <- unit tests suite configuration
7
tests/functional created           <- functional tests
8
tests/functional.suite.yml written <- functional tests suite configuration
9
tests/acceptance created           <- acceptance tests
10
tests/acceptance.suite.yml written <- acceptance tests suite configuration
11
tests/_output was added to .gitignore
12
 --- 
13
tests/_bootstrap.php written <- global bootstrap file
14
Building initial Tester classes
15
Building Actor classes for suites: acceptance, functional, unit
16
 -> AcceptanceTesterActions.php generated successfully. 0 methods added
17
\AcceptanceTester includes modules: PhpBrowser, \Helper\Acceptance
18
AcceptanceTester.php created.
19
 -> FunctionalTesterActions.php generated successfully. 0 methods added
20
\FunctionalTester includes modules: \Helper\Functional
21
FunctionalTester.php created.
22
 -> UnitTesterActions.php generated successfully. 0 methods added
23
\UnitTester includes modules: Asserts, \Helper\Unit
24
UnitTester.php created.
25
26
Bootstrap is done. Check out /Users/Jeff/Sites/hello/tests directory

Vì vài lý do, tôi cũng đã sao chép các thư mục test trùng lặp trong hello / tests; chỉ cần xóa hello / tests / functional, hello / tests / accept, và hello / tests / unit xóa mọi thứ. Tất cả các bài test đều có trong thư mục hello/tests/codeception/*.

Các loại hình test khác nhau

Codeception tập trung vào ba loại hình test:

  1. Unit testing xác thực các đơn vị cụ thể đang hoạt động, chẳng hạn như test toàn diện tất cả các phương thức trong model của bạn.
  2. Functional testing xác thực các kịch bản ứng dụng phổ biến giống như được thực hiện từ phía người dùng, nhưng bằng cách sử dụng trình mô phỏng trình duyệt web.
  3. Acceptance testing giống y như functional testing nhưng chạy test thông qua trình duyệt web thực sự.

Và Codeception hỗ trợ ba loại hình test khác nhau cho code test của bạn:

  1. Cept: đây là file test cho kịch bản đơn giản nhất
  2. Cest: một định dạng hướng đối tượng để chạy nhiều test trong một file duy nhất
  3. Test: các bài test được viết trên PHPUnit, một framework dùng cho mục đích test của PHP.

Hãy bắt đầu với ví dụ về các acceptance tests có sử dụng cept format (định dạng):

Acceptance Testing

Trước tiên, chúng tôi sẽ sử dụng ví dụ test Welcome của Codeception.

1
$ codecept generate:cept acceptance Welcome
2
Test was created in /Users/Jeff/Sites/hello/tests/acceptance/WelcomeCept.php

Ví dụ này tạo ra các bài tests/acceptance/WelcomeCept.php, mà chúng tôi sẽ chỉnh sửa bên dưới.

Vì các acceptance test cần có trình duyệt, chúng tôi phải chỉnh sửa file /tests/acceptance.suite.yml trong dự án của chúng tôi để cung cấp URL trang chúng tôi đang phát triển, http://localhost:8888/hello:

1
# Codeception Test Suite Configuration
2
#
3
# Suite for acceptance tests.
4
# Perform tests in browser using the WebDriver or PhpBrowser.
5
# If you need both WebDriver and PHPBrowser tests - create a separate suite.
6
7
class_name: AcceptanceTester
8
modules:
9
    enabled:
10
        - PhpBrowser:
11
            url: http://localhost:8888/hello/
12
        - \Helper\Acceptance

Bây giờ, chúng ta đã sẵn sàng để sửa đổi bài test đầu tiên trong các bài tests/acceptance/WelcomeCept.php. Tôi đang viết bài test dùng tải trang font-page để đảm bảo rằng mọi thứ hoạt động theo ý muốn.

Các bài test của Codeception có khái niệm về actor, trong trường hợp này là $I = new AcceptanceTester().

Đây là mô tả về actor trong tài liệu Codeception:

Chúng ta có UnitTester để xử lý các hàm và kiểm tra code. Chúng ta cũng có FunctionalTester, một trình test hội đủ điều kiện để test toàn bộ ứng dụng, với các hiểu biết bên trong của nó. Và AcceptanceTester để dùng làm việc với ứng dụng của chúng tôi thông qua một giao diện do chúng tôi cung cấp.

Bạn có thể nhận xét các bài test của mình bằng code, chẳng hạn như $I->wantTo('perform a certain test') hoặc 'ensure that the frontpage works'.

Trong test của tôi, tôi muốn nội dung $I->see'Congratulations''Yii-powered':

1
<?php
2
$I = new AcceptanceTester($scenario);
3
$I->wantTo('ensure that frontpage works');
4
$I->amOnPage('/');
5
$I->see('Congratulations!');
6
$I->see('Yii-powered');

Đây là trang chủ hiện tại của Hello:

Programming with Yii - The Hello Home PageProgramming with Yii - The Hello Home PageProgramming with Yii - The Hello Home Page

Tiếp theo, hãy chạy test, đơn giản là codecept run:

1
$ codecept run
2
Codeception PHP Testing Framework v2.1.11
3
Powered by PHPUnit 5.3.5 by Sebastian Bergmann and contributors.
4
Acceptance Tests (1) ---------------------------------------------------------------------------------------
5
Ensure that frontpage works (WelcomeCept)                                                             Ok
6
------------------------------------------------------------------------------------------------------------
7
Functional Tests (0) ------------------------
8
---------------------------------------------
9
Unit Tests (0) ------------------------------
10
---------------------------------------------
11
Time: 554 ms, Memory: 10.25MB
12
OK (1 test, 2 assertions)

Như bạn có thể thấy, test của chúng tôi đã vượt qua thành công và code để xác minh chức năng này tương đối dễ đọc và đơn giản.

Ghi chú về các bài test mặc định của Yii

Để tiếp tục, tôi bắt đầu sử dụng các bài test mặc định của Yii. Tại thời điểm này, tôi đã gặp phải một số vấn đề về cấu hình - hầu hết là do tôi sử dụng mô-đun yii2-user tự dựng trong loạt bài này. Những vấn đề khác phát sinh từ các lỗi nhỏ với Yii, đội ngũ Yii đã nhanh chóng phản hồi và sửa lỗi khi nhận báo cáo trên GitHub; trong một số trường hợp, các vấn đề đã được khắc phục trong các phiên bản sau của yii2-basic tree.

Ngoài ra, vì tôi đã cập nhật yii2-basic tree cho loạt bài này nên tôi phải thực hiện một số thay đổi nhỏ cho những bài test mặc định.

Dưới đây là ví dụ kết quả để chạy acceptance test mặc định khi tôi đã thực hiện một số điều chỉnh nhỏ:

1
$ codecept run
2
Codeception PHP Testing Framework v2.1.11
3
Powered by PHPUnit 5.3.5 by Sebastian Bergmann and contributors.
4
5
Acceptance Tests (4) -------------------------------------------------------------------------------------------------
6
Ensure that about works (AboutCept)                                                                             Ok
7
Ensure that contact works (ContactCept)                                                                         Ok
8
Ensure that home page works (HomeCept)                                                                          Ok
9
Ensure that login works (LoginCept)                                                                             Ok
10
----------------------------------------------------------------------------------------------------------------------

Functional Testing

Để test chức năng hoạt động, tôi cần chạy một đối tượng máy chủ tích hợp sẵn của Yii. Tôi đã không biết về thành phần này cho đến khi Alex Markov của Yii đề cập đến nó trong cuộc trao đổi GitHub của chúng tôi.

1
$ ./yii serve

Tôi đã thực hiện các thay đổi nhỏ cho các bài functional test trong /tests/codeception/functional, chủ yếu để tìm các chuỗi văn bản cụ thể đã được cập nhật, ví dụ như "mật khẩu hoặc đăng nhập lỗi" thay cho mặc định của Yii. Cùng xem lại LoginCept.php:

1
<?php
2
use tests\codeception\_pages\LoginPage;
3
$I = new FunctionalTester($scenario);
4
5
$I->wantTo('ensure that login works');
6
7
$loginPage = LoginPage::openBy($I);
8
$I->see('Login');
9
$I->amGoingTo('try to login with empty credentials');
10
$loginPage->login('', '');
11
$I->expectTo('see validations errors');
12
$I->see('Login cannot be blank.');
13
$I->see('Password cannot be blank.');
14
15
$I->amGoingTo('try to login with wrong credentials');
16
$loginPage->login('admin', 'wrong');
17
$I->expectTo('see validations errors');
18
$I->see('Invalid login or password');
19
20
$I->amGoingTo('try to login with correct credentials');
21
$loginPage->login('admin', 'admin11');
22
$I->expectTo('see user info');
23
$I->see('Logout');

Về cơ bản, code truy xuất vào model LoginForm và test các phương thức khác nhau của model này bằng cách sử dụng Yii serve.

Đây là code test /tests/codeception_pages/LoginPage.php mà nó đang tận dụng (tôi cũng phải sửa đổi nó cho những thay đổi mà chúng tôi đã thực hiện cho loạt bài này):

1
class LoginPage extends BasePage
2
{
3
    public $route = 'user/login';
4
5
    /**

6
     * @param string $username

7
     * @param string $password

8
     */
9
    public function login($username, $password)
10
    {
11
        $this->actor->fillField('input[name="login-form[login]"]', $username);
12
        $this->actor->fillField('input[name="login-form[password]"]', $password);
13
        $this->actor->click('button[type=submit]');
14
    }
15
}

Bạn có thể thấy rằng chúng tôi đang code actor thành fillFields và các nút click cho các trường biểu mẫu đã cập nhật.

Trong lúc khắc phục sự cố gặp phải khi tích hợp Codeception với Yii, tôi thấy thật hữu ích khi chạy các test này ở chế độ verbose:

1
$ codecept run -vvv

Đây là kết quả verbose từ các bài functional test chức năng đăng nhập — trong Terminal của MacOS, PASSED và FAILED có màu đỏ hoặc hồng và bị đảo ngược để hiển thị:

1
Functional Tests (4) -------------------------------------------------------------------------------------------------
2
Modules: Filesystem, Yii2
3
...
4
----------------------------------------------------------------------------------------------------------------------
5
Ensure that login works (LoginCept)
6
Scenario:
7
* I am on page "/index-test.php/user/login"
8
9
  [Page] /index-test.php/user/login
10
  [Response] 200
11
  [Request Cookies] []
12
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
13
* I see "Login"
14
* I am going to try to login with empty credentials
15
* I fill field "input[name="login-form[login]"]",""
16
* I fill field "input[name="login-form[password]"]",""
17
* I click "button[type=submit]"
18
  [Uri] http://localhost/index-test.php/user/login
19
  [Method] POST
20
  [Parameters] {"_csrf":"VEpvcmk3bVgFH1Y9AVsmYWQQDEouTSggYXMFGStdKBEnCyQfBxo8Bw==","login-form[login]":"","login-form[password]":""}
21
  [Page] http://localhost/index-test.php/user/login
22
  [Response] 200
23
  [Request Cookies] {"_csrf":"dd395a9e5e3c08cfb1615dae5fc7b5ba0a2025c003e430ba0139b300f4a917ada:2:{i:0;s:5:"_csrf";i:1;s:32:"QU9OhlK90Zc8GzEx59jkBjEIsAKmn-Q_";}"}
24
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
25
* I expect to see validations errors
26
* I see "Login cannot be blank."
27
* I see "Password cannot be blank."
28
* I am going to try to login with wrong credentials
29
* I fill field "input[name="login-form[login]"]","admin"
30
* I fill field "input[name="login-form[password]"]","wrong"
31
* I click "button[type=submit]"
32
  [Uri] http://localhost/index-test.php/user/login
33
  [Method] POST
34
  [Parameters] {"_csrf":"QjFBRl9hMjMTZHgJNw15CnJrIn4YG3dLdwgrLR0Ld3oxcAorMUxjbA==","login-form[login]":"admin","login-form[password]":"wrong"}
35
  [Page] http://localhost/index-test.php/user/login
36
  [Response] 200
37
  [Request Cookies] {"_csrf":"dd395a9e5e3c08cfb1615dae5fc7b5ba0a2025c003e430ba0139b300f4a917ada:2:{i:0;s:5:"_csrf";i:1;s:32:"QU9OhlK90Zc8GzEx59jkBjEIsAKmn-Q_";}"}
38
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
39
* I expect to see validations errors
40
* I see "Invalid login or password"
41
* I am going to try to login with correct credentials
42
* I fill field "input[name="login-form[login]"]","admin"
43
* I fill field "input[name="login-form[password]"]","admin11"
44
* I click "button[type=submit]"
45
  [Uri] http://localhost/index-test.php/user/login
46
  [Method] POST
47
  [Parameters] {"_csrf":"bG8uMXdPYk49Ohd.HyMpd1w1TQkwNSc2WVZEWjUlJwcfLmVcGWIzEQ==","login-form[login]":"admin","login-form[password]":"admin11"}
48
  [Headers] {"location":["http://localhost/index-test.php"],"content-type":["text/html; charset=UTF-8"]}
49
  [Page] http://localhost/index-test.php/user/login
50
  [Response] 302
51
  [Request Cookies] {"_csrf":"dd395a9e5e3c08cfb1615dae5fc7b5ba0a2025c003e430ba0139b300f4a917ada:2:{i:0;s:5:"_csrf";i:1;s:32:"QU9OhlK90Zc8GzEx59jkBjEIsAKmn-Q_";}"}
52
  [Response Headers] {"location":["http://localhost/index-test.php"],"content-type":["text/html; charset=UTF-8"]}
53
  [Redirecting to] http://localhost/index-test.php
54
  [Page] http://localhost/index-test.php
55
  [Response] 200
56
  [Request Cookies] {"_csrf":"dd395a9e5e3c08cfb1615dae5fc7b5ba0a2025c003e430ba0139b300f4a917ada:2:{i:0;s:5:"_csrf";i:1;s:32:"QU9OhlK90Zc8GzEx59jkBjEIsAKmn-Q_";}"}
57
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
58
* I expect to see user info
59
* I see "Logout"
60
 PASSED 

Nói chung, cần phải học để bắt đầu với Codeception và code đúng cho test của bạn. Nhưng kết quả thật ấn tượng và hữu dụng.

Unit Testing

Về cơ bản, unit test là test có lập trình của các model của chúng tôi. Lý tưởng nhất, chúng tôi sẽ viết test cho mọi phương thức và biến thể sử dụng của model của chúng tôi.

Thật không may, tôi đã không thể khiến unit test làm việc trong tree của chúng tôi vì một trong hai lỗi nhỏ của Yii chưa được công bố hoặc các vấn đề cấu hình giữa Codeception và yii2-user mà chúng tôi tích hợp trong How to Program With Yii2: Integrating User Registration.

1
Unit Tests (3) ----------------------------------------------------------------------------------------------------
2
Modules: 
3
-------------------------------------------------------------------------------------------------------------------
4
Trying to test login no user (tests\codeception\unit\models\LoginFormTest::testLoginNoUser)... 
5
<pre>PHP Fatal Error &#039;yii\base\ErrorException&#039; with message &#039;Call to undefined function

6
tests\codeception\unit\models\expect()&#039; 

Tôi sẽ giải quyết vấn đề unit test một lần nữa trong loạt bài Startup của chúng tôi, ở đó không sử dụng yii2-user mà thay vào đó sử dụng tích hợp người dùng tích hợp sẵn của cây Nâng cao Yii.

Hãy xem xét một vài ví dụ từ Yii2-app-basic tree.

Kiểm tra Email biểu mẫu liên hệ

Các bài test hello/tests/codeception/unit/models/ContactFormTest.php gửi email thông qua việc lập trình của các model.

1
<?php
2
3
namespace tests\codeception\unit\models;
4
5
use Yii;
6
use yii\codeception\TestCase;
7
use Codeception\Specify;
8
9
class ContactFormTest extends TestCase
10
{
11
    use Specify;
12
13
    protected function setUp()
14
    {
15
        parent::setUp();
16
        Yii::$app->mailer->fileTransportCallback = function ($mailer, $message) {
17
            return 'testing_message.eml';
18
        };
19
    }
20
21
    protected function tearDown()
22
    {
23
        unlink($this->getMessageFile());
24
        parent::tearDown();
25
    }
26
27
    public function testContact()
28
    {
29
        $model = $this->createMock('app\models\ContactForm', ['validate']);
30
        $model->expects($this->once())->method('validate')->will($this->returnValue(true));
31
32
        $model->attributes = [
33
            'name' => 'Tester',
34
            'email' => 'tester@example.com',
35
            'subject' => 'very important letter subject',
36
            'body' => 'body of current message',
37
        ];
38
39
        $model->contact('admin@example.com');
40
        
41
        $this->specify('email should be send', function () {
42
            expect('email file should exist', file_exists($this->getMessageFile()))->true();
43
        });
44
45
        $this->specify('message should contain correct data', function () use ($model) {
46
            $emailMessage = file_get_contents($this->getMessageFile());
47
48
            expect('email should contain user name', $emailMessage)->contains($model->name);
49
            expect('email should contain sender email', $emailMessage)->contains($model->email);
50
            expect('email should contain subject', $emailMessage)->contains($model->subject);
51
            expect('email should contain body', $emailMessage)->contains($model->body);
52
        });
53
    }
54
55
    private function getMessageFile()
56
    {
57
        return Yii::getAlias(Yii::$app->mailer->fileTransportPath) . '/testing_message.eml';
58
    }
59
60
}

Tôi đã không vượt qua bài test này vì có một lỗi nhỏ trong Yii chưa được cập nhật (hoặc ít nhất tôi không thể tìm thấy code cập nhật). Sự sụt giảm của Yii codebase đã đặt tên cho email gửi đi với date stamp và code ở trên tìm kiếm một tên file cố định. Do đó, test này luôn thất bại. Tuy nhiên, thật hữu ích khi nhìn thấy cách bài test bằng lập trình có thể sử dụng các model để tạo ra một file và sau đó tìm file đó và xác thực nội dung của file để xác nhận rằng code đó đang hoạt động.

Kiểm tra Đăng nhập

Hãy xem file hello/tests/codeception/unit/models/LoginFormTest.php. Thêm một lần nữa, việc sử dụng yii2-user của tôi gây khó khăn khi tích hợp tại thời điểm viết hướng dẫn này; tuy nhiên, chúng ta có thể xem xét cách tiếp cận khái niệm đối với các hàm unit testing của model user.

Đây là hàm testLoginCorrect(), có vẻ để xem liệu đăng nhập có thành công với mật khẩu chính xác hay không:

1
public function testLoginCorrect()
2
    {
3
        $model = new LoginForm([
4
            'username' => 'admin',
5
            'password' => 'admin11',
6
        ]);
7
8
        $this->specify('user should be able to login with correct credentials', function () use ($model) {
9
            expect('model should login user', $model->login())->true();
10
            expect('error message should not be set', $model->errors)->hasntKey('password');
11
            expect('user should be logged in', Yii::$app->user->isGuest)->false();
12
        });
13
    }

Hàm này sử dụng model LoginForm để đăng nhập bằng lập trình cho người dùng, và sau đó nó lập trình trông để xem liệu người dùng hiện tại của Yii bây giờ không còn là khách nữa không.

1
expect('user should be logged in', Yii::$app->user->isGuest)->false();

Tiếp theo là gì?

Tôi hy vọng rằng bạn thích học về Codeception và cách nó tích hợp với Yii, dù tôi đã gặp phải một số rào cản. Phần cài đặt mặc định của yii2-basic giờ đã tốt hơn.

Nếu bạn muốn đọc thêm về chủ đề khi nào và cái gì cần test và lý do tại sao, tôi đề nghị bạn nên đọc bài Yii's Testing Overview. Chắc chắn sẽ có nhiều về Codeception để học và viết nhiều test hoàn thiện hơn.

Theo dõi các hướng dẫn sắp tới trong loạt bài Programming with Yii2 khi chúng tôi tiếp tục đào sâu vào các khía cạnh khác nhau của framework. Nếu bạn muốn biết khi nào hướng dẫn tiếp theo của Yii2 đến, hãy theo dõi tôi @reifman trên Twitter hoặc xem qua trang hướng dẫn của tôi.

Bạn cũng có thể muốn xem loạt bài Building Your Startup with PHP của tôi, ở đó sử dụng các template nâng cao của Yii2 khi chúng tôi xây dựng một ứng dụng thực tế. Trong thực tế, bạn có thể thử ứng dụng startup, Meeting Planner ngay hôm nay.

Liên kết liên quan

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.