gpt4 book ai didi

php - 通过 Codeception 使用存在规则测试 Laravel 5 路由

转载 作者:可可西里 更新时间:2023-10-31 22:50:23 26 4
gpt4 key购买 nike

我正在使用 Codeception 库为我的 Laravel 应用程序编写测试。我正在使用 Laravel5 module ,并使用 cleanup 配置它,这意味着所有测试都将在数据库事务中运行,这样我的测试数据库就不会被测试数据填满。

我正在测试的端点之一通过表单请求针对它设置了以下验证规则:

public function rules()
{
return ['user_id' => 'required|exists:users,id'];
}

我为 POST 到此端点而编写的测试如下:

public function store(ApiTester $I)
{
// Create a couple of users
$users = factory(\App\Models\User::class, 2)->create();

$I->wantTo('ask someone to be my friend');
$I->authenticateAs($users[0]);
$I->sendPOST('users/' . $users[0]->id . '/friendships', [
'user_id' => $users[1]->id
]);
$I->seeResponseCodeIs(201);
}

这个测试总是失败。经过调查,我可以看到它失败了,因为请求由于 exists:users,id 规则而无法通过验证。如果我将 Codeception 设置更改为不在事务内执行测试,Laravel 的验证器可以成功地看到我在测试开始时创建的两个用户的存在并且测试通过。

所以,我的问题是,有什么方法可以维持将每个测试包装在数据库事务中的行为,并让 Laravel 的验证器能够看到我在测试中创建的记录?

最佳答案

问题是,如果事务没有提交,数据库表中的原始数据不会受到影响。因此,在事务中,您创建了两个用户,但没有将其持久保存到您的数据库的提交语句。因此,laravel 验证规则“存在”无法找到它们(该规则发出数据库请求以查找特定的 user_id )。

因此在您的情况下,用户必须在测试前就存在。我建议改用迁移。 Resetting Database after each test

使用数据库迁移和种子创建表,并在测试完成后回滚它们。

关于php - 通过 Codeception 使用存在规则测试 Laravel 5 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33085786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com