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



Kung nagtatanong ka kung ano ba ang Yii, tignan mo ang naunang tutoryal ko na pinamagatang Introduction to the Yii Framework. Tinalakay ng naunang tutoryal ang mga benepisyo ng Yii at ang pangkalahatang-ideya tungkol sa Yii 2.0 na inilabas noong Oktubre 2014.
Sa serye ito na Programming sa Pamamagitan ng Yii2, ginagabayan ko ang mga nagbabasa gamit ang Yii2 Framework para sa PHP. Sa tutoryal na ito, sisiyasatin ko ang awtomatikong pagsusuri gamit ang Codeception na kasama sa pagbubuo ng balangkas ng Yii2.
Inaamin ko na may kakulangan ang karanasan ko sa paggawa ng mga pagsusulit gamit ang kowd ko. Naging parte ako ng mga maliliit na proyekto na may limitadong pinagkukunan. Noong panahong nasa Microsoft pa ako, mayroon kaming partikular na team sa pagsusuri na ginawa ito. Ngunit sa totoo lang, ito ay maaaring katulad mo land din ito, ‘di ba? Gusto ng mga programmer na mag—kowd pero ayaw nilang gumawa ng pagsusuri.
Ang Codeception ay isang makabagong librerya na naglalayong gawing madali at masaya ang paggawa ng mga pagsusuri. At sa palagay ko ay nagtumpay naman sila sa makatwirang lebel. Sa pagsisimula ko sa paggamit ng Codeception, madali at masaya ito sa halos kabuuan ng proseso. Ngunit nang lumaon, nakatagpo ako ng mga isyu ng konpigurasyon sa Yii at sa mga partikular na module sa seryeng ito. Sa pangkalahatan, ako ay namangha dito. Nakita ko din ang benepisyo kung mas pag-aaralan pa ito.
Sa madaling salita, sa unang pagkakataon, ginanahan akong bumuo ng marami pang pagsusuri dahil sa Codeception at ang pagkasama nito sa Yii. Sa tingin ko ay ganito rin ang mararanasan mo.
Paalala bago tayo magsimula, sumasali talaga ako sa mga diskusyon ng mga komento sa ibaba. Mas lalo akong interesado kung ninanais mong magbigay ng karagdagang ideya o magmungkahi ng mga paksa para sa mga susunod na tutoryal. Mag-post ka lamang sa ibaba kung may gusto kang itanong o imungkahing paksa. Maaari mo din akong makausap nang direkta sa Twitter @reifman.
Pagsisimula
Pag-install ng Codeception
Para gabayan ako, ginamit ko ang dokumentasyon ng Yii’s Testing Environment Setup. Nagsimula ako sa global na pag-install ng Codeception para magamit ko ito sa anumang proyekto.
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 |
Kinakailangan mo ding humingi ng 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 |
At 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 |
Kasunod nito, ang paggamit mo ng iyong global na sangguniang
kompositor ay makatutulong
sa pag-set-up ng alyas para sa codecept
.
1 |
$ composer global status
|
2 |
Changed current directory to /Users/Jeff/.composer |
3 |
No local changes
|
Itinatakda nito ang alyas:
1 |
$ alias codecept="/Users/Jeff/.composer/vendor/bin/codecept" |
Inoobliga ka din ng Yii na mag-install ng Faker na gumagawa ng mga pekeng datos na sinusuri para sa iyong aplikasyon.
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 |
Pag-set-up ng Codeception Kasama ng Iyong Aplikasyon
Sinisimulan
ng Codecept bootstrap
ang codeception para sa iyong aplikasyon na Yii sa
pamamagitan ng paggawa ng iba’t ibang file ng konpigurasyon para
sa pagbubuo at
pagsasagawa ng pagsusuri sa iyong aplikasyon. Sa tutoryal na ito, ginagamit natin ang aplikasyon na Hello na
mula sa seryeng ito. Hanapin ang GitHub link sa pahinang ito para makuha ang kowd.
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 |
Sa di malamang dahilan, napunta din ako sa mga nadobleng
direktorua ng pagsusuri sa
hello/tests. Naging malinaw sa akin ang mga bagay-bagay nang
alisin ko ang
hello/tests/functional, hello/tests/acceptance, at
hello/tests/unit. Ang lahat ng mga pagsusuri ay nasa hello/test/codeception* mismo.
Ang Iba’t Ibang Uri ng Pagsusuri
Ang Codeception ay nakapokus sa tatlong uri ng mga pagsusuri:
- Ang unit testing ay sinisiguradong gumagana ang mga partikular na units. Isang halimbawa nito ay ang malawakang pagsusuri sa lahat ng mga sistema ng iyong modelo.
- Ang functional testing ay ang nagbeberipika sa mga karaniwang sitwasyon ng aplikasyon na parang nararanasan ng user pero sa pamamagitan ng paggamit ng module na kagaya lang ng web browser.
- Ang acceptance testing ay katulad lang ng functional testing pero ito ay gumagamit talaga ng web browser sa pagsasagawa ng pagsusuri.
At sinusuportahan nito ang tatlong iba’t ibang klase ng ayos ng pagsusuri para sa iyong kowd sa pagsusuri.
- Cept: Ito ay ang pinakasimpleng iisang senaryo na test file
- Cest: obdyek na ibinagay ang format para sa pagpapatakbo ng maramihang pagsusuri sa loob ng iisang file
- Test: mga pagsusuring binuo sa PHPUnit na isang balangkas ng pagsusuring PHP
Magsimula tayo sa halimbawa ng acceptance tests gamit ang cept format:
Acceptance Testing
Gagamitin muna natin ang halimbawa ng Paunang
pagsusuri ng
Codeception.
1 |
$ codecept generate:cept acceptance Welcome
|
2 |
Test was created in /Users/Jeff/Sites/hello/tests/acceptance/WelcomeCept.php
|
Magbibigay ito ng tests/acceptance/WelcomeCept.php
na siyang
aayusin natin sa ibaba.
Dahil nangangailangan ng browser ang mga acceptance test, kailangan nating i-edit sa ating proyekto ang /tests/acceptance.suite.yml para maibigay ang ating development URL, 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 |
Ngayon tayo ay handa na na baguhin ang naunang pagsusuri sa to tests/acceptance/WelcomeCept.php. Gumagawa ako ng pagsusuri na nai-lo-load ang pambungad na pahina para siguraduhing gagana ito sa paraang inaasahan.
Ang mga pagsusuring Codeception ay may konsepto ng aktor, sa
kasong ito $I = new AcceptanceTester()
.
Ganito kung paano nito inilalarawan ang mga aktor sa dokumentasyon ng Codeception.
Mayroon tayong UnitTester na tumutupad sa mga tungkulin at nagsusuri sa kowd. Mayroon din tayong kwalipikadong tester na FuntionalTester na nagsusuri ng kabuuan ng aplikasyon at may kaalaman sa panloob na sistema nito. At ang AcceptanceTester ay ang user na gumagana kasama ng ating aplikasyon sa pamamagitan ng ibibigay naming interface.
Pwede mong ipakita ang iyong mga pagsusuri gamit ang kowd gaya ng $I->wantTo('perform a certain test')
o ‘siguraduhing
gumagana ang frontpage’
sa mga komento.
Sa aking pagsusuri, gusto kong makita ang $1 -> tignan
ang text
para sa ‘Congratulations’
at
‘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'); |
Ito ang kasalukuyang home page ng Hello:



Kasunod nito, isagawa na natin ang pagsusuri, 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) |
Gaya ng iyong nakikita, pasado ang ating pagsusuri at ang kowd para patunayan ang punksyonalidad ay lubos na nababasa at simple.
Mga Paalala sa mga Default na Pagsusuri ng Yii
Para lumalim pa ang diskusyon, sinimulan kong gamitin ang mga default na pagsusuri ng Yii. Sa puntong ito, nakatagpo ako ng ilang isyu ng konpigurasyon na halos lahat ay epekto ng paggamit ko ng nababagong yii2-user module sa seryeng ito. Ang iba naman ay dahil sa mga maliliit na bug ng Yii na mabilis namang nasosolusyonan ng mga debeloper ng Yii matapos iulat ito sa kanila. Sa ibang pagkakataon, ang mga isyu ay naisaayos lamang nang nailabas ang yii2-basic tree.
At dahil in-update ko ang yii2-basic tree para sa seryeng ito, kinailangan kong baguhin nang kaunti ang mga default na pagsusuri.
Ito ang halimbawa ng output para sa pagpapatakbo ng default na acceptance tests nang ginawa ko ang ilang pagsasa-ayos:
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
Para mapagawa ko ang functional tests, kinakailangan kong isagawa ang isang halimbawa ng built-in server ng Yii. Hindi ko pa ito alam hanggang nang banggitin ito ng Alex Markov ng Yii noong kami ay nagpalitan ng GitHub exchange.
1 |
$ ./yii serve
|
Binago ko nang kaunti ang functional tests sa /tests/codeception/functional na kadalasan ay para hanapin ang mga in-update ko na espesipikong lupon ng mga salita gaya ng “Invalid login or password” (“Maling login o password”) kapalit ng default ng Yii. Ito ang itsura ng 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'); |
Ang kowd ay may access sa modelo ng LoginForm
. Sinusuri din nito
ang iba’t ibang
pamamaraan nito gamit ang Yii serve.
Ito ang /test/codeception_pages/LoginPage.php na pasusuring kowd na kaaya-aya (kinailangan kong ayusin ito para sa mga ginawa nating pagbabago sa seryeng ito):
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 |
}
|
Makikita mo na nai-kowd natin ang aktor sa fillFields
. I-click
ang
mga buton para sa ating mga
na-iupdate na form field.
Habang isinasaayos ang aking pagsasama ng Codeception sa Yii, nalaman ko na nakatutulong sa pagsasagawa ng pagsusuri kung gagawin itong masalita.
1 |
$ codecept run -vvv |
Ito ay ang masalitang output mula sa Login functional tests. Sa
MacOS Terminal, ang PASADO
at BAGSAK
ay naka-kowd sa kulay na pula o rosas at binaliktad para
agad makita.
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 |
Sa pangkalahatan, may ilang bagay na dapat matutunan muna bago makapagsimula sa paggamit ng Codeception at maayos na mai-kowd ang iyong mga pagsusuri. Pero ang mga resulta ay kahanga-hanga at nakatutulong.
Unit Testing
Sa madaling salita, ang mga pagsusuri ng unit ay ang pagsusuring
pangprograma ng ating
imprastraktura at mga modelo. Ang gusto natin ay makabuo tayo ng mga pagsusuri para sa bawat
pamamaraan at baryasyon
ng paggamit ng mga modelo natin.
Sa kasamaang palad, hindi ko napagana ang mga pagsusuri ng unit sa loob ng ating sistema. Maaaring dahil ito sa mga maliliit na bug ng Yii na hindi pa nailabas o sa mga isyu ng konpigurasyon sa pagitan ng Codeception at yii2-user na pinagsama natin sa Paano Mag-program Gamit ang Yii 2: Pagsasama ng Pagrerehistro ng User.
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 'yii\base\ErrorException' with message 'Call to undefined function |
6 |
tests\codeception\unit\models\expect()' |
Babanggitin ko ulit ang pagsusuri ng unit sa ating serye na Startup na gumagamit ng built-inYii Advance.
Tignan natin ang dalawang halimbawa galing sa Yii2-app-basic tree.
Pagsusuri ng mga Email ng Contact Form
Ang hello/tests/codeception/unit/models/ContactFormTest.php ay sinusuri ang pagpapadala ng email sa pamamagitan ng paggamit ng programa ng mga modelo:
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 |
}
|
Hindi ko nakayang ipasa nang matagumpay ang pagsusuring ito dahil sa maliit na bug ng Yii na hindi pa na-update (o siguro hindi ko pa nahahanap ang na-update na kowd). Ang paraan ng paglalabas ko sa Yii codebase ay ang paglalagay ng mga selyo ng petsa sa mga ipapadalang email habang ang kowd sa itaas ay sa pamamagitan ng paghahanap ng permanenteng filename. Kaya parati itong nabigo. Kahit na ganoon, kapaki-pakinabang pa din naman na makita kung paano magagamit ng pagsusuri ng programa ang modelo sa paglikha ng file. Pagkatapos, hanapin ang file na iyon at i-tsek ang mga nilalaman nito para mapatunayang gumagana ang kowd.
Testing Login
Tignan natin ang hello/tests/codeception/unit/models/LoginFormTest.php. Inuulit ko, ang paggamit ko ng yii2-user ay ang naging dahilan para maging sobrang hirap bumuo sa oras ng pagsulat sa tutoryal na ito. Gayunpaman, pwede nating tignan ang konseptwal na aspeto sa pagsusuri ng unit sa mga tungkulin ng modelo ng user.
Ito ang testLoginCorrect()
na nagkukumpirma
kung matagumpay na nakapag-log in gamit ang tamang password.
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 |
}
|
Gumagamit ito ng modelo ng LoginForm
para
maglog-in ang user sa programa. Pagkataposm titignan sa programa kung ang
kasalukuyang user ng Yii ay hindi na panauhin lamang.
1 |
expect('user should be logged in', Yii::$app->user->isGuest)->false(); |
Ano ang susunod?
Umaasa ako na nagustuhan niyo ang pag-aaral sa pagsasama ng Codeception sa Yii kahit na may mga ilang hadlang akong nakaharap. Ang default na pag-install sa yii2-basic ngayon ay dapat mas maayos nang gumagana.
Kung nais mo pang magbasa tungkol sa pagdedesisyon kung kalian at ano ang susuriin at bakit, nirerekomenda ko ang pagbabasa ng Pangkalahatang-ideya ng Pagsusuri sa Yii. Siguradong mayroon pang mas maraming matutunan tungkol sa Codeception at sa pagbuo ng mas kumpletong mga pagsusuri.
Hintayin ang mga susunod na tutoryal sa aming
serye na Pag-program Gamit ang Yii2 sa pagpapatuloy naming pagsasaliksik sa iba
pang aspeto ng balangkas. Kung gusto mong malaman kung kalian lalabas
ang susunod na tutoryal sa Yii2, sundan mo ako @reifman sa Twitter o tignan ang
aking instructor page.
Baka nais mo ding tignan ang aming serye na Pabubuo ng Iyong Startup Gamit ang PHP na gumagamit ng advance template ng Tii habang gumagawa kami ng aplikasyon na praktikal na magagamit. Sa katunayan, maaari mong subukan ngayon ang startup na aplikasyon na Meeting Planner.
Related Links
- Codeception
- Diskusyon ng mga Debeloper ng Yii2, my Yii2 reasource site
- Yii2 Testing Environment Setup