私は、fixtureとTestモデルを作成するためにcake bakeコマンドを使用しています。私は私のモデルの1つでそれを成功させましたが、私は別のもので問題を抱えています。テストDB cakePHPテストの選択方法
なぜ私はすでに定義したテストの代わりにデフォルトのDBで作業しようとしています。これはテストした最初のモデルで使用されたものです。
両方のテストモデルはうまく動作し、この2つはケーキベークで作成されており、まったく同じように見えます。
二人とも自分のフィクスチャクラスでこれを持っている:
public $import = array('records' => true, 'connection' => 'test');
テストは、私のテストデータベースへの接続を定義します。 何が問題なのですか?
私は何か変わった実験をしています。私のテストモデルでは、複数の代わりにシングルを使用する場合、デフォルトのDBで動作しますBUTこれを複数に変更すると、テスト用のデータベースで動作します。 (ただし、モデルからメソッドを呼び出すことはできません。find()などのメソッドだけを呼び出すことができます)。例えば
:
public function setUp() {
parent::setUp();
//uses the default DB (i dont know why)
$this->Post = ClassRegistry::init('Post');
print_r($this->User->find('all'));
$this->Post->updatePostsStatus(1); //works well
//uses the default Test Database (i dont know why either)
$this->Post = ClassRegistry::init('Posts');
print_r($this->User->find('all'));
$this->Post->updatePostsStatus(1); //doesn't work. No function found.
/*SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'updatePostsStatus' at line 1*/
}
感謝。
私はそれを更新しました。
LAST UPDATE、その溶液
問題は、ポストモデルコンストラクタの悪い初期化しました。 複数形の使用は関係ありませんでした。存在しないモデルを使用するようなものです。それは常にテストデータベースを取得します。 コンストラクタの良い初期化のための答えはここにある: How to override model's constructor correctly in CakePHP
'Default'データベースに添付されている' Post'というクラスがレジストリにあります。これは以前にインスタンス化されている可能性があります。あなたが 'Posts'を呼び出そうとすると、Cakeはレジストリ内でその名前のクラスを見つけられませんので、新しいクラスを作成します。あなたがテストスイートに入っているので、新しいクラス' Posts' 'test'です – luchomolina
それでは、私に何をお勧めしますか? – Alvaro
申し訳ありませんが、私も紛失しています。しかし、1つのことは... 'public $ import = array( 'Post')'のようなレコードをインポートしようとしましたか? 'test' dbを自動的に付け加えるべきです。 – luchomolina