0

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();
    }
4

1 に答える 1

1

コントローラーをテストするときは、メソッドControllerTestCaseを利用するためにテスト ケース クラスを拡張してください。testAction()

于 2012-04-12T15:13:27.090 に答える