0

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 を使用しています

4

1 に答える 1

2

フィクスチャでは、小文字の下線付きの規則が優先されます。これを行う:

public $fixtures = array('plugin.cron.cron_job');

プラグインなので; ClassRegistry::init次のようなプラグイン表記を必ず使用してください。

$this->CronJob = ClassRegistry::init('Cron.CronJob');

このエラーは、CakePHP がメソッドなしで非プラグインCronJobモデルを遅延ロードするために発生しますcollect()

于 2012-10-03T23:49:42.977 に答える