LoginSignup
5
6

More than 5 years have passed since last update.

Yii 1.x で Codeception を使ってみる

Last updated at Posted at 2013-07-31

はじめに

Yii Framework 1.x 系で Codeception を試してみました。
Codeception の公式サイトを見ると、Yii1 Module というものがありますが、
ちょっと設定などがよくわからなかったので、自分なりにセットアップしてみました。
( Codeception に関する詳しい情報は公式サイトをご覧ください: http://codeception.com/ )

protected/tests ディレクトリの入れ替え

既存のテストファイルを Codeception に入れ替える感じでやっていきます。

とりあえず protected/tests を protected/tests_default にリネームして、
composer.json で codeception 行を追加して Codeception をインストール。

composer.json
{
    "require": {
        "yiisoft/yii": "1.1.14-rc"
    },
    "require-dev": {
        "codeception/codeception": "*",
        "phpunit/phpunit-selenium": "*",
        "phpunit/phpunit-story": "*",
        "phpunit/dbunit": "*",
        "phpunit/php-invoker": "*"
    }
}
composer update

次に bootstrap コマンドで protected 以下に Codeception のファイルを作成。

./vendor/bin/codecept bootstrap protected

データベースを扱っている場合は protected/tests/_data/ にテスト用のデータをエクスポートし、
そのあと protected/codeception.yml でデータベースの設定などをする。

codeception.yml
paths:
    ...
settings:
    ...
modules:
    config:
        Db:
            dsn: 'mysql:host=localhost;dbname=hoge_test'
            user: 'testuser'
            password: 'testpass'
            dump: tests/_data/hoge_test.sql

ユニットテストを実行してみる

protected/tests/unit.suite.yml で Db モジュールを使うように修正

unit.suite.yml
class_name: CodeGuy
modules:
    enabled: [Db, CodeHelper]

変更後は build コマンドを忘れずに

../vendor/bin/codecept build

protected/tests/unit/_bootstrap.php を以下のように修正

_bootstrap.php
<?php
$yii = dirname(__FILE__).'/../../../vendor/yiisoft/yii/framework/yii.php';
$config = dirname(__FILE__).'/../../config/test.php';

require_once($yii);

if (!Yii::app()) {
    Yii::createWebApplication($config);
}

ユニットテスト自体は元の tests_default/unit/ にあったものをコピペして
extends を DbTestCase から \PHPUnit_Framework_TestCase に修正すれば、
そのまま扱えるかと思います。

また、共通で扱うメソッドなどを別クラスに書いている場合は
tests/_helpers/CodeHelper.php などに移しておくといいかもしれません。
( 利用時は use Codeception\Module\CodeHelper; )

で、ユニットテストの実行は以下

../vendor/bin/codecept run unit

受け入れテストを実行してみる

protected/tests/acceptance.suite.yml で 扱うモジュールを書いて PhpBrowser の url を修正。
変更後は build を忘れずに。

acceptance.suite.yml
class_name: WebGuy
modules:
    enabled: [PhpBrowser, Db, WebHelper]
    config:
        PhpBrowser:
            url: 'http://local.hoge/index-test.php'

次に cept ファイルを生成。

../vendor/bin/codecept generate:cept acceptance hoge/Index

cept ファイルはページ毎にファイルを生成しテストを書く感じなので、
個人的にはコントローラ毎にディレクトリを分けたほうが、テストしやすいかなと思います。
( cest ファイルにする場合は特にしなくてよいかも )

あとは /tests/acceptance/word/IndexCept.php にテストを書いて実行。

../vendor/bin/codecept run acceptance -d

Yii のインスタンスが欲しい場合

受け入れテストや機能テストでも Yii のインスタンスが欲しい場合は
tests/unit/ の _bootstrap.php と同じような感じにすればいいと思います。

また、unit, acceptance, functional の _bootstrap.php で共通の処理をしている場合は、
tests/ にある _bootstrap.php にまとめてしまうほうがいいかもしれません。

まとめ

Yii1 Module で書かれている CodeceptionHttpRequest などは
全く使っていないわりに動いたのでちょっと不安ですが、
YIi 1.x 系での Codeception の導入のやり方などをまとめてみました。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6