使用 CakePHP 3 和 PHPUnit 测试 delete() 方法不起作用

Test delete() method with CakePHP 3 and PHPUnit doesn't work

我使用 bake 生成了 users table 的 controller ,现在我需要使用 PHPUnit 和 CakePHP 3 测试记录是否已被删除。

没有提示错误,只是测试失败。

I can not apply this solution: Solution

在 UsersControllerTest 中删除测试:

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

试试看:

$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);