2012-04-12 1 views
0

Я создал тест для контроллера, используя команду Cake bake.Тестирование не работает CakePHP2.0

Теперь я хочу, чтобы проверить функцию «индекс» контроллер и для него я делаю это:

public function testIndex() { 

    echo "printed"; 

    $result = $this->testAction("/comments/1"); 

    echo "not printed"; 

} 

1 является парами, идентификатор поста, где комментарий есть. Во всяком случае, контроллер работает отлично, нет проблем с ним.

Как вы можете видеть, тест вызывается после вызова метода testAction. (он не печатает второе эхо)

Я видел, что если действие, вызываемое контроллером, имеет какой-либо вызов его модели, вызов TestAction не будет работать. Но, если действие для тестирования не имеет никакого вызова какой-либо модели, то оно отлично работает.

Что здесь происходит? Кстати, обе базы данных, по умолчанию и test имеют в себе данные, поэтому это не проблема с базой данных.

Спасибо.

UPDATE: здесь есть остальная часть 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(); 
    } 
+0

где ваш метод testAction()? код? – thecodeparadox

+0

Было бы неплохо увидеть остальную часть тестового примера (т. Е. Родительский класс, mocks, импорт и т. Д.). – jeremyharris

+0

Я понятия не имею, его метод, определенный в CakePHP для работы с тестами. Он должен работать: http://book.cakephp.org/2.0/en/development/testing.html#testing-controllers – Alvaro

ответ

1

Когда вы тестируете контроллеры, убедитесь, расширить класс тестовых случаев на ControllerTestCase, чтобы воспользоваться преимуществами testAction() способ.