【问题标题】:Test delete() method with CakePHP 3 and PHPUnit doesn't work使用 CakePHP 3 和 PHPUnit 测试 delete() 方法不起作用
【发布时间】: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


【解决方案1】:

试试看:

$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();
        $result_count = count($result);
        $expected_count = 0;
        $this->assertEquals($expected_count, $result_count);

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 2012-09-18
    • 2013-11-05
    • 2015-07-08
    • 2015-02-08
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    相关资源
    最近更新 更多