私は CakePHP (PHPUnit) でさまざまなモデル テストを書いています。
TravisCI では、次のようなメッセージが表示されます:「ベース テーブルまたはビューが見つかりません: 1146 テーブル 'test.events' Cake のテスト ランナーでアサーション エラーが発生します。
私が抱えている問題は、App::uses で他のモデルを呼び出すテストしようとしている ModelClasses にメソッドがあることです。例えば:
ユーザーモデルの方法:
public function getOtherData() {
App::uses('Event', 'Model');
$this->Event = new Event;
return $this->Event->find('all');
}
そしてテスト:
public function testGetOtherData() {
$result = $this->User->getOtherData();
$this->assertTrue(!empty($result));
}
上記の例はまさにそれであることに注意してください。問題を示すために単純化された例。上記の例には、より良い「簡単な」方法があることを理解しています。
また、必要なフィクスチャの定義を使用していますが、問題なく動作します。(App::Uses() の代わりに検索で結合を使用するモデルの別の方法でこれを知っています)
編集: 実行時のコードは機能しますが、UnitTest は、テスト データベースではなく、既定のデータベースで他のモデル データ (App::uses を使用する場合) を探しています。テストデータベースを使用しないのはなぜですか? 何か不足していますか?
ラストノート
App::uses() を使用してクラスをインスタンス化すると、実行時に機能します。ただし、テスト中は、テスト データベース接続ではなくデフォルトのデータベース接続を使用しようとするため、失敗します。
App::uses, Cakes built in class registry, を使用するのではなく、選択した回答ClassRegistry::init('Model', true);
に従って、別のモデルメソッド内からモデルを含めることができます。