【发布时间】:2015-11-28 10:37:18
【问题描述】:
我使用 bake 来生成 users 表的 controller,现在我需要使用 PHPUnit 和 CakePHP 3 进行测试,如果记录有已删除。
没有提示错误,只是测试失败。
我无法应用此解决方案:Solution
UsersControllerTest 中的testDelete:
public function testDelete()
{
$this->get('/users/delete/900000');
$users = TableRegistry::get('Users');
$query = $users->find('all', [
'fields' => ['Users.id', 'Users.email', 'Users.password',
'Users.username', 'Users.user_type_id', 'Users.created',
'Users.modified'],
'conditions' => ['Users.id' => 900000]
]);
$result = $query->hydrate(false)->toArray();
$this->assertEmpty($result);
}
UsersController 中的删除方法:
public function delete($id = null)
{
$user = $this->Users->get($id);
if ($this->Users->delete($user)) {
$this->Flash->success(__('The user has been deleted.'));
} else {
$this->Flash->error(__('The user could not be deleted. Please, try again.'));
}
return $this->redirect(['action' => 'index']);
}
数据源测试:
'test' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
//'port' => 'nonstandard_port_number',
'username' => 'shop',
'password' => 'shop',
'database' => 'shoppingtest',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'quoteIdentifiers' => false,
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
]
注意:CakePHP 3.0.11 和 PHPUnit 4.8.6
【问题讨论】:
-
您在调用
get()后检查过响应吗?顺便说一句,为什么您允许使用 GET 请求进行删除?您知道这是一种安全风险吗?
标签: cakephp phpunit cakephp-3.0