Yii-テスト

PHPクラスを作成するときは、段階的にデバッグするか、dieまたはechoステートメントを使用してその動作を確認します。Webアプリケーションを開発する場合、ページが期待どおりに機能することを確認するために、フォームにテストデータを入力しています。このテストプロセスは自動化できます。

自動テストアプローチは、長期的なプロジェクトに適しています。

  • 複雑で大規模
  • 絶えず成長する
  • 失敗のコストの点で高すぎる

プロジェクトが複雑にならず、比較的単純な場合、または1回限りのプロジェクトである場合、自動テストはやり過ぎになる可能性があります。

テストの準備

Step 1−Codeceptionフレームワークをインストールします。次のコードを実行します。

composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"

Step 2 −以下を実行します。

composer global status

出力は「現在のディレクトリを<ディレクトリ>に変更しました」です。'<directory> / vendor / bin'をPATH変数に追加する必要があります。この場合、次のコードを実行します-

export PATH = $PATH:~/.composer/vendor/bin

Step 3 −という新しいデータベースを作成します 'yii2_basic_tests'

Step 4 −テストディレクトリ内で実行します。

codeception/bin/yii migrate

データベース構成は次の場所にあります。 tests/codeception/config/config.php

Step 5 −を介してテストスイートを構築します。

codecept build

備品

フィクスチャの主な目的は、テストが期待どおりに実行されるように、環境を不明な状態に設定することです。Yiiはフィクスチャに近いフレームワークを提供します。Yiiフィクスチャフレームワークの重要な概念はフィクスチャオブジェクトです。これは、テスト環境の特定の側面を表しています。フィクスチャオブジェクトは、yii\test\Fixture class

フィクスチャを定義するには、新しいクラスを作成し、yii \ test \ Fixtureまたはyii \ test \ ActiveFixtureから拡張する必要があります。前者は汎用フィクスチャに適していますが、後者はデータベースとActiveRecordで動作するように特別に設計されています。

ユニットテスト

単体テストは、個々の機能をテストするのに役立ちます。たとえば、モデル関数やコンポーネントクラス。

Step 1 −というファイルに新しいフィクスチャを作成します ExampleFixture.phptests/codeception/fixtures ディレクトリ。

<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = ‘app⊨’MyUser';
   }
?>

Step 2 −次に、tests / codeception / unit / modelsフォルダーにExampleTest.phpという新しいテストファイルを作成します。

<?php
   namespace tests\codeception\unit\models;
   use app\models\MyUser;
   use yii\codeception\TestCase;
   class ExampleTest extends TestCase {
      public function testCreateMyUser() {
         $m = new MyUser();
         $m->name = "myuser";
         $m->email = "[email protected]";
         $this->assertTrue($m->save());
      }
      public function testUpdateMyUser() {
         $m = new MyUser();
         $m->name = "myuser2";
         $m->email = "[email protected]";
         $this->assertTrue($m->save());
         $this->assertEquals("myuser2", $m->name);
      }
      public function testDeleteMyUser() {
         $m = MyUser::findOne(['name' => 'myuser2']);
         $this->assertNotNull($m);
         MyUser::deleteAll(['name' => $m->name]);
         $m = MyUser::findOne(['name' => 'myuser2']);
         $this->assertNull($m);
      }
   }
?>

上記のコードでは、3つのテストを定義します-

  • testCreateMyUser,
  • testUpdateMyUser、および
  • testDeleteMyUser.

新しいユーザーを作成し、名前を更新して、削除しようとしました。私たちは管理しますMyUser 実際のDBの完全なコピーであるyii2_basic_testsデータベースに関するモデル。

Step 3 −開始するには tests、testsフォルダーに移動して実行します。

codecept run unit models/ExampleTest

すべてのテストに合格する必要があります。次のように表示されます-

機能テスト

機能テストは-であなたを助けます

  • ブラウザエミュレータを使用してアプリケーションをテストする
  • 関数が正しく機能することを確認します
  • データベースと対話する
  • サーバーサイドスクリプトにデータを送信する

テストフォルダ内で実行-

generate:cept functional AboutPageCept

上記のコマンドは、 AboutPageCept.phptests / codeception / functionalフォルダーの下にあるファイル。この機能テストでは、about ページが存在します。

Step 1 −を変更します AboutPageCept.php ファイル。

<?php
   $I = new FunctionalTester($scenario);
   $I->wantTo('perform actions and see result');
   $I->amOnPage('site/about');
   $I->see('about');
   $I->dontSee('apple');
?>

上記のコードで、aboutページにいるかどうかを確認しました。明らかに、ページには「about」という単語が表示され、「apple」は表示されないはずです。

Step 2 −経由でテストを実行します。

run functional AboutPageCept

次の出力が表示されます-