タグ: SimpleTest

CodeIgniter + SimpleTest

PHPUnitとCI_Unitを導入しようとしましたが、要求されるPHP5のバージョンを満たすことができなかったため、代わりにSimple Test for PHPを使うことにしました

  • CodeIgniterのインストール先(index.php)をCI_ROOTとする
  • URLをhttp://example.jp/とする

1.Simpletest Integration for CodeIgniterのインストール

CodeIgniterとSimple TestをつなげるSimpletest Integration for CodeIgniterを導入します

$ git clone もしくは zipダウンロードを解凍してできたディレクトリに入る
$ cp unit_test.php CI_ROOT/
$ cp -r tests CI_ROOT/

※デフォルトのセッションクラスを利用している場合、application/config/config.phpのconfig[‘encryption_key’]に値を設定しておきましょう。

2.動作確認

http://example.jp/unit_test.phpにアクセスします。

3.サンプルテストを動かす

「All」を実行すると「Fatal error: Class ‘Users_model’ not found」と表示されます。

これは、テスト対象となる、Users_modelモデルクラスがないためで問題ありません。

test_users_model.php内で、

$this->load->model('users/users_model');

とあるので$CI_ROOT/application/models/users/users_model.phpを作成して

Users_modelモデルを定義し、テストを実行しながらメソッドを実装していきます。

4.コマンドライン上で動かす

コマンドラインで上からテストを実行できます。

$ cd $CI_ROOT

a.全テスト

$ php unit_test.php

b.個別テスト

パラメータにtestsディレクトリ以下のパスを指定します。

$ php unit_test.php models/users_model_test.php

CodeIgniterは2系からコマンドラインに対応しているため、
$_SERVER[‘argv’]に値が入っていると、CodeIgniterのエラーになります。

そこで、多少無理矢理ですが以下を修正します。

$CI_ROOT/unit_test.php
133行目付近
  else
   {
        $_POST[$argv[1]] = $argv[1];
   }

↓
  else
   {
        $_POST[$argv[1]] = $argv[1];
   }
  array_pop($_SERVER['argv']);
  --$_SERVER['argc'];

5.注意点

全テストは$CI_ROOT/tests/modelsなどのディレクトリにあるファイルを、テストファイルとして実行するので、関係ないファイルやバックアップファイルなどがあるとエラーになります。
(unit_test.php内のmap_tests()などでindex.htmlを除く全ファイルを登録しているため)

広告