CakePHP アプリでプラグイン モデルをテストしようとしています。このモデルは、このフィクスチャをセットアップした「cron_jobs」というテーブルを使用します。
class CronJobFixture extends CakeTestFixture
{
public $import = array('table' => 'cron_jobs');
}
私のテストクラスはうまく機能し、次のようになります。
<?php
App::uses('CronJob', 'Cron.Model');
class CronJobTest extends CakeTestCase
{
public $fixtures = array('plugin.cron.CronJob');
public function setUp()
{
parent::setUp();
$this->CronJob = new CronJob();
}
public function testCollectFailsOnMissingComponent()
{
$this->setExpectedException('InvalidArgumentException');
$this->CronJob->collect(null);
}
public function testCollectSilentOnMissingComponent()
{
$result = $this->CronJob->collect('SomeNonExistingComponent');
$this->assertEquals(null, $result);
}
// Some more tests that will need the fixture ....
}
次に、置き換えてテスト設定を変更すると
$this->CronJob = new CronJob();
と
$this->CronJob = ClassRegistry::init("CronJob");
フィクスチャをロードするには、次のエラーが発生します。
CronJobTest::testCollectSilentOnMissingComponent PDOException: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。1行目の「collect」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
2 つのテストでカバーされているコードはデータベースにアクセスしないため、エラーは CronJob クラスのどの要素によっても生成されません。テスト データベースの構成を変更するとデータベース接続エラーが発生するため、テスト データベースが正しく構成されていることは確かです。
CakePHP 2.2.1、PHPUnit 3.6.12、PHP 5.4 を使用しています