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



Si vous demandez, "Qu'est-ce que Yii?" Consultez mon tutoriel précédent, Introduction au framework Yii, qui passe en revue les avantages de Yii et comprend un aperçu des nouveautés de Yii 2.0, publiées en octobre 2014.
Dans cette série de programmation avec Yii2, je guide les lecteurs dans l'utilisation du framework Yii2 pour PHP. Dans ce tutoriel, je vais explorer les tests automatisés à l'aide de Codeception, intégré au framework de développement Yii2.
Certes, mon expérience en rédaction de tests avec mon code est rare. J'ai souvent fait partie de projets individuels ou de petits projets avec des ressources limitées. Pendant mon temps chez Microsoft, nous avions plusieurs équipes de test qui ont fait cela. Mais franchement, cela est probablement typique de vous aussi, non? Les programmeurs aiment coder, ils n'écrivent pas de tests - du moins les programmeurs de la vieille école ne l'ont pas fait.
Codeception est une bibliothèque innovante qui vise littéralement à rendre les tests d’écriture faciles et amusants. Et, je dirais qu'ils ont réussi dans une mesure raisonnable. Quand j'ai plongé mon pied dans l'eau de "Lake Codeception", c'était surtout facile et amusant. Cependant, alors que je commençais à aller plus loin, j'ai rencontré des problèmes de configuration avec Yii et les modules spécifiques utilisés dans cette série. Il y avait certainement des défis. Dans l’ensemble, cependant, je suis impressionné et vois les avantages d’apprendre davantage.
En résumé, Codeception et son intégration à Yii me donnent envie d'écrire plus de tests, une première pour moi. Je soupçonne que vous aurez une expérience similaire.
Un petit rappel avant de commencer, je participe aux commentaires ci-dessous. Je suis particulièrement intéressé si vous avez des idées supplémentaires ou si vous souhaitez suggérer des sujets pour de futurs tutoriels. Si vous avez une question ou une suggestion de sujet, veuillez poster ci-dessous. Vous pouvez également me joindre directement sur Twitter @reifman.
Commencer
Installer Codeception
Pour me guider, j'ai utilisé la documentation de Yii Testing Environment Setup. J'ai commencé avec une installation globale de la réception de code afin de pouvoir l'utiliser depuis n'importe quel projet.
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 |
Vous devez également exiger une codeception/spécifier
:
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 |
Et codeception/vérifier
:
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 |
Ensuite, il est utile de configurer un alias pour codecept
en utilisant votre répertoire global composer
1 |
$ composer global status
|
2 |
Changed current directory to /Users/Jeff/.composer |
3 |
No local changes
|
Cela définit l'alias:
1 |
$ alias codecept="/Users/Jeff/.composer/vendor/bin/codecept" |
Yii nécessite également l’installation de Faker, qui génère de fausses données de test pour votre application:
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 |
Configuration de la réception de code avec votre application
Codecept bootstrap
initialise la réception de code pour votre application Yii, en créant divers fichiers de configuration permettant de créer et d'exécuter des tests sur votre application. Nous utilisons l'application Hello de cette série pour ce tutoriel. Voir le lien GitHub sur cette page pour obtenir le 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 |
Pour une raison quelconque, je me suis également retrouvé avec des répertoires de test en double dans hello/tests; il suffit de supprimer hello/tests/fonctionnel, hello/tests/acceptation et hello/tests/unit pour régler le problème. Tous les tests vivent dans hello/tests/codeception/*.
Les différents types d'essais
Codeception se concentre sur trois types de tests:
- Le test d'unité vérifie que des unités spécifiques fonctionnent, comme un test exhaustif de toutes les méthodes de votre modèle.
- Les tests fonctionnels vérifient les scénarios d'application courants comme si un utilisateur les agissait, mais en utilisant l'émulation de navigateur Web.
- Les tests d'acceptation sont identiques aux tests fonctionnels, mais ils sont exécutés via un navigateur Web.
Et il prend en charge trois types de formats de test pour votre code de test:
- Cept: c'est le fichier de test de scénario unique le plus simple
- Cest: un format orienté objet pour l'exécution de plusieurs tests dans un seul fichier
- Test: tests écrits sur PHPUnit, un framework de test PHP
Commençons par un exemple de tests d'acceptation utilisant le format cept:
Test d'acceptation
Nous allons d'abord utiliser l'exemple de test Welcome
de Codeception.
1 |
$ codecept generate:cept acceptance Welcome
|
2 |
Test was created in /Users/Jeff/Sites/hello/tests/acceptance/WelcomeCept.php
|
Cela génère des tests/acceptation/WelcomeCept.php
, que nous éditerons ci-dessous.
Comme les tests d'acceptation nécessitent le navigateur, nous devons modifier /tests/acceptance.suite.yml dans notre projet pour fournir notre URL de développement, 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 |
Nous sommes maintenant prêts à modifier le test initial dans le fichier tests/acceptance/WelcomeCept.php. J'écris un test qui charge la première page pour s'assurer qu'il fonctionne comme prévu.
Les tests de réception de code utilisent le concept d'acteur, dans ce cas, $I=new AcceptanceTester()
.
Voici comment cela décrit les acteurs dans la documentation de Codeception:
Nous avons un UnitTester, qui exécute des fonctions et teste le code. Nous avons également un FunctionalTester, un testeur qualifié, qui teste l'application dans son ensemble, avec une connaissance de ses composants internes. Et un AcceptanceTester, un utilisateur qui travaille avec notre application via une interface que nous fournissons.
Vous pouvez commenter vos tests avec du code, tel que $I->wantTo('perform a certain test')
ou'ensure that the frontpage works'
.
Dans mon test, je veux voir $I->see
le texte 'Congratulations!'
et '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'); |
Voici la page d'accueil actuelle de Hello:



Ensuite, exécutons le test, simplement 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) |
Comme vous pouvez le constater, notre test a réussi et le code permettant de vérifier cette fonctionnalité était assez lisible et simple.
Notes sur les tests par défaut de Yii
Pour aller plus loin, j'ai commencé à utiliser les tests par défaut de Yii. À ce stade, j'ai rencontré un certain nombre de problèmes de configuration, dus pour la plupart à mon utilisation du module yii2-user personnalisé de cette série. D'autres étaient dus à de petits bugs avec Yii, que son équipe a rapidement réagi et corrigé lorsqu'il a été rapporté sur GitHub; dans certains cas, les problèmes avaient été résolus dans les versions ultérieures de l'arborescence yii2-basic.
De plus, comme j'avais mis à jour l'arborescence yii2-basic pour cette série, je devais apporter de petites modifications à certains des tests par défaut.
Voici un exemple de résultat pour l'exécution des tests d'acceptation par défaut une fois que j'avais apporté quelques modifications mineures:
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 |
----------------------------------------------------------------------------------------------------------------------
|
Test fonctionel
Pour que les tests fonctionnels fonctionnent, je devais exécuter une instance du serveur intégré de Yii. Je n'avais pas entendu parler de ce composant jusqu'à ce qu'Alex Markov de Yii en parle dans notre échange GitHub.
1 |
$ ./yii serve
|
J'ai apporté de petites modifications aux tests fonctionnels dans /tests/codeception/functional, principalement pour rechercher mes chaînes de texte mises à jour spécifiques, c'est-à-dire "Identifiant ou mot de passe invalide" à la place de la valeur par défaut de Yii. Voici un aperçu de 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'); |
Fondamentalement, le code accède au modèle LoginForm
et teste ses différentes méthodes en utilisant Yii serve.
Voici le code de test /tests/codeception_pages/LoginPage.php dont il tire parti (je devais également le modifier pour les modifications apportées à la série):
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 |
}
|
Vous pouvez voir que nous codons l'acteur sur fillFields
et click
sur les boutons pour les champs de formulaire mis à jour.
Lors du dépannage de l'intégration de Codeception avec Yii, j'ai trouvé utile d'exécuter ces tests en mode prolixe:
1 |
$ codecept run -vvv |
Voici le résultat détaillé des tests fonctionnels de connexion: dans MacOS Terminal, PASSED
et FAILED
sont codés par une couleur rouge ou rose et inversés pour une meilleure visibilité:
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 |
Globalement, il y a un peu à apprendre à utiliser Codeception et à coder correctement vos tests. Mais les résultats sont impressionnants et utiles.
Tests unitaires
Fondamentalement, les tests unitaires sont des tests programmatiques de notre infrastructure et de nos modèles. Idéalement, nous rédigerions des tests pour chaque méthode et chaque variante d'utilisation de nos modèles.
Malheureusement, je n’ai pas pu faire fonctionner les tests unitaires dans notre arborescence à cause de petits bugs Yii qui n’ont pas encore été publiés ou de problèmes de configuration entre Codeception et yii2-user que nous avons intégrés à Comment programmer avec Yii2: Intégration de l’enregistrement utilisateur.
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()' |
J'aborderai à nouveau les tests unitaires dans notre série Startup qui n'utilise pas yii2-user mais utilise plutôt l'intégration utilisateur intégrée de l'arborescence Yii Advanced.
Regardons quelques exemples de l'arbre Yii2-app-basic.
Test des emails du formulaire de contact
Hello/tests/codeception/unit/models/ContactFormTest.php teste l'envoi d'un courrier électronique par le biais d'une utilisation programmatique de modèles:
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 |
}
|
Je n'ai pas réussi à faire passer ce test à cause d'un petit bogue dans Yii qui n'a pas encore été mis à jour (ou au moins je n'ai pas trouvé le code mis à jour). Ma chute de la base de code Yii nommait le courrier électronique sortant avec les horodatages et le code ci-dessus cherchait un nom de fichier fixe. Ainsi, cela a toujours échoué. Néanmoins, il est utile de voir comment les tests programmatiques peuvent utiliser des modèles pour générer un fichier, puis rechercher ce fichier et valider son contenu pour vérifier que le code fonctionne.
Test de connexion
Regardons hello/tests/codeception/unit/models/LoginFormTest.php. Encore une fois, mon utilisation de yii2-user a rendu l’intégration trop difficile au moment de la rédaction de ce tutoriel; Cependant, nous pouvons examiner l’approche conceptuelle des fonctions de modèle d’utilisateur des tests unitaires.
Voici testLoginCorrect()
, qui vérifie si la connexion réussit avec un mot de passe correct:
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 |
}
|
Il utilise le modèle LoginForm
pour connecter l'utilisateur par programme, puis recherche par programme si l'utilisateur actuel de Yii n'est plus un invité.
1 |
expect('user should be logged in', Yii::$app->user->isGuest)->false(); |
Et après?
J'espère que vous avez apprécié l'apprentissage de Codeception et de son intégration à Yii, en dépit des obstacles que j'ai rencontrés. L'installation par défaut de yii2-basic aujourd'hui devrait mieux fonctionner.
Si vous souhaitez en savoir plus sur le choix du moment et des raisons du test, je vous recommande de lire la vue d'ensemble des tests de Yii. Il y a certainement plus à apprendre sur Codeception et à écrire des tests plus complets.
Surveillez les prochains tutoriels de notre série Programmation avec Yii2 pendant que nous continuons à explorer différents aspects du cadre. Si vous souhaitez savoir quand le prochain tutoriel Yii2 arrive, suivez-moi @reifman sur Twitter ou consultez ma page d'instructeur.
Vous voudrez peut-être aussi consulter notre série Construire votre démarrage avec PHP, qui utilise le modèle avancé de Yii2 pour créer une application réelle. En fait, vous pouvez essayer l'application de démarrage, Meeting Planner, aujourd'hui.
Liens connexes
- Codeception
- Yii2 Developer Exchange, mon site de ressources Yii2
- Configuration de l'environnement de test Yii2