Я смотрел на некоторых примерах в книге рецептов, но я не понимаю: http://book.cakephp.org/2.0/en/development/testing.html#a-more-complex-exampleТестирование переназначение CakePHP 2,0
Как я могу проверить перенаправление в действии Удалять, как этот?
public function delete($id = null){
$this->Comment->id = $id;
if (!$this->Comment->exists()) {
throw new NotFoundException(__('Invalid comment'));
}
if ($this->Comment->delete()) {
$this->Session->setFlash(__('Comment deleted'));
return $this->redirect(array('controller' => 'posts', 'action' => 'view', $idPost));
}
$this->Session->setFlash(__('Comment was not deleted'));
return $this->redirect(array('controller' => 'posts', 'action' => 'view', $idPost));
}
}
Испытание прекращается после того, как перенаправление, так что даже не печатать это эхо:
public function testDelete(){
$result = $this->testAction("/comments/delete/1");
echo "this is not printed";
print_r($this->headers);
}
Удивительно, если он бросает пустую ошибку. В этом случае вы можете попытаться насмехаться над функцией «render» на контроллере, так как в любом случае нет никакого вида удаления. – jeremyharris
Что это значит, насмехаясь над этим? И да, нет, перенаправление прекрасно работает, и действие вида не пусто. – Alvaro
Mocking - это процедура тестирования, при которой определенные методы возвращают то, что вы хотите. Например, 'CakeRequest :: send()' издевается и говорит ничего не делать, чтобы он не отправлял заголовки. Вы даже можете рассказать, какие методы или что ответить (см .: http://www.phpunit.de/manual/3.0/en/mock-objects.html). Для легкой насмешки с Cake, проверьте: http://book.cakephp.org/2.0/en/development/testing.html#using-mocks-with-testaction.'ControllerTestCase :: testAction()' делает некоторые из этого автоматически для вас. – jeremyharris