Cakebake
コマンドを使用してコントローラーのテストを作成しました。
ここで、コントローラーの関数「インデックス」をテストしたいので、次のようにします。
public function testIndex() {
echo "printed";
$result = $this->testAction("/comments/1");
echo "not printed";
}
1 はパラメータ、コメントがある投稿の ID です。とにかく、コントローラーは完璧に機能します。問題はありません。
ご覧のとおり、testAction メソッドを呼び出した後、テストがクラッシュします。(2 番目のエコーは表示されません)
コントローラーで呼び出されたアクションにそのモデルへの呼び出しがある場合、testAction 呼び出しが機能しないことがわかりました。ただし、テストするアクションにモデルへの呼び出しがない場合は、完全に機能します。
ここで何が起こっているのですか?ちなみに、デフォルトとテストの両方のデータベースにデータが含まれているため、データベースの問題でもありません。
ありがとう。
更新: Cake bake コマンドによって生成された残りの testController があります。
<?php
/* Comments Test cases generated on: 2012-04-12 11:49:17 : 1334224157*/
App::uses('CommentsController', 'Controller');
/**
* TestCommentsController *
*/
class TestCommentsController extends CommentsController {
/**
* Auto render
*
* @var boolean
*/
public $autoRender = false;
/**
* Redirect action
*
* @param mixed $url
* @param mixed $status
* @param boolean $exit
* @return void
*/
public function redirect($url, $status = null, $exit = true) {
$this->redirectUrl = $url;
}
}
/**
* CommentsController Test Case
*
*/
class CommentsControllerTestCase extends CakeTestCase {
/**
* Fixtures
*
* @var array
*/
public $fixtures = array('app.comment');
/**
* setUp method
*
* @return void
*/
public function setUp() {
parent::setUp();
$this->Comments = new TestCommentsController();
$this->Comments->constructClasses();
}
/**
* tearDown method
*
* @return void
*/
public function tearDown() {
unset($this->Comments);
parent::tearDown();
}