我被告知我们还必须测试Cake创建的功能,如添加/删除...
如果我有这样的功能,如果它没有任何返回,重定向甚至是视图,我该怎么测试呢? (我用ajax来执行它)
public function add() {
if ($this->request->is('post')) {
$this->Comment->create();
if ($this->Comment->save($this->request->data)) {
$this->Session->setFlash(__('The comment has been saved'));
} else {
$this->Session->setFlash(__('The comment could not be saved. Please, try again.'));
}
}
}
由于
答案 0 :(得分:2)
这是一种测试它的通用方法。
function testAdd() {
$Posts = $this->generate('Posts', array(
'components' => array(
'Session',
'RequestHandler' => array(
'isAjax'
)
)
));
// simulate ajax (if you can't mock the magic method, mock `is` instead
$Posts->RequestHandler
->expects($this->any())
->method('isAjax')
->will($this->returnValue(true));
// expect that it gets within the `->is('post')` block
$Posts->Session
->expects($this->once())
->method('setFlash');
$this->testAction('/posts/add', array(
'data' => array(
'Post' => array('name' => 'New Post')
)
));
// check for no redirect
$this->assertFalse(isset($this->headers['Location']));
// check for the ajax layout (you'll need to change
// this to check for something in your ajax layout)
$this->assertPattern('/<html/', $this->contents);
// check for empty view (I've never had an empty view but try it out)
$this->assertEqual('', $this->view);
}
答案 1 :(得分:1)
public function add() {
$this->autoRender = false;
if ($this->request->is('post')) {
$this->Comment->create();
if ($this->Comment->save($this->request->data)) {
echo json_encode(array('status' => 'ok'));
} else {
echo json_encode(array('status' => 'fail'));
}
}
}