CakePHPで単体テスト Console/cake bake

Pocket

CakePHPの単体テストのメモ。

テスト用データベース

app/Config/database.phpで定義する。

WEBブラウザ、コンソールともにCakePHPのテストは$testで定義したデータベースを使う。
$testのデータベース定義はapp/Config/database.phpで行う。

public $default = [
    'datasource' => 'Database/Mysql',
    .....
    .....
    'database'   => 'example',
    'prefix'     => '',
    'encoding'   => 'utf8',
];

// テストで使うデータベース定義
public $test = [
    'datasource' => 'Database/Mysql',
    .....
    .....
    'database'   => 'test_example',
    'prefix'     => '',
    'encoding'   => 'utf8',
];

毎回テストの最初に$testで定義したデータベースへフィクスチャを用いてテーブルおよびレコードを作成しテストが終わると破棄する。

フィクスチャの作成

Console/cake bakeを使いConsoleから対話的にフィクスチャを作成できる。

(例1)

app/Console/cake bake

Would you like to import schema for this fixture? (y/n)                 y
Would you like to use record importing for this fixture?(y/n)           y

上記のように選択すると下記のようなフィクスチャが作成される。
テストの度に$testで定義したデータベースへ$defaultで定義しているデータベースからスキーマとレコードを読み込む。

public $import = array('model' => 'Example', 'records' => true);

(例2)

    Would you like to import schema for this fixture? (y/n)                      y
    Would you like to use record importing for this fixture?(y/n)                n
    Would you like to build this fixture with data from Account's table? (y/n)   y

上記のように選択するとフィクスチャは下記のように作成される。
スキーマは$defaultで定義しているデータベースから読み込まれレコードはフィクスチャに記述されたものが使われる。

public $import = array('model' => 'Example');

/**
 * Records
 *
 * @var array
 */
public $records = array(
    array(
        'id' => '1',
        'created' => '2015-04-01 05:50:21',
        'modified' => '2015-04-01 05:50:21',
    ),
    array(
        'id' => '2',
        'user_id' => '42',
        'created' => '0000-00-00 00:00:00',
        'modified' => '0000-00-00 00:00:00',
    ),
);

テストサーバー

CakeDC/migrationsでスキーマを管理しているときは下記コマンドでテストサーバーにテーブルを作成し、例2のように作成したフィクスチャでテストを行う(スキーマはdefautから読込みレコードはフィクスチャから読み込む)。

./app/Console/cake Migrations.migration run all -p

CircleCIで上手く機能している。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。