読者です 読者をやめる 読者になる 読者になる

Can't create test_suite_tables when run testcase. (CakePHPでテスト用テーブルを本番テーブルと同じにした状態だとテスト用テーブルを作成してくれない)

CakePHP

#cakephp@irc.codecheck.inでいろいろ話した内容まとめ。

Version

CakePHP 1.2.3.8166
PostgreSQL 8.3
CakePHP Test Suite 1.2.0.0

What I did:

  • database.phpから$testのテスト用テーブル設定をコメントアウト
    • 自動でtest_suite_のprefixをつけたテスト用テーブルを本番DBに作成してくれる
  • 全てのFixtureクラスで$importプロパティを設定して本番のテーブル構成を取得
    • usersテーブルがあった場合のFixtureの例
<?php                                                                
/* SVN FILE: $Id$ */                                                 
/* User Fixture generated on: 2009-07-14 21:07:05 : 1247572805*/     
                                                                     
class UserFixture extends CakeTestFixture {
    var $name = 'User';                                              
    var $import = array('model' => 'User');
    var $records = array(array(  
        'id'  => 1,                                                  
        'name'  => 'k1LoW',                 
        'username'  => 'k1low', 
        'password'  => 'hoge',
        'mail'  => 'k1low@101000lab.org', 
        'created'  => '2009-07-14 21:00:05', 
        'modified'  => '2009-07-14 21:00:05' 
    )); 
}  
?>

What I expected to happen:

bakeで作成したレベルのテストケースが通常通り通ると思った。

  • CREATE TABLEでtest_suite_usersが作成される
  • テストケースが走る
  • DROP TABLEでtest_suite_usersが削除される

Why it didn't meet my expectations:

なぜか最初にDROP TABLEが走ってしまいエラーを返す。

Possible Fix:

cake/tests/lib/cake_test_case.phpのstart()の条件判定が問題だと判断し、一応PostgreSQL用の対処をしてみた。

追記

assignされた。結果バグにしろバグでないにしろ解決策が得られると思う。

再度追記

CakePHP1.2.4.8284でFixされた
https://trac.cakephp.org/wiki/changelog/1.2.x.x/8284