【发布时间】:2016-01-10 04:58:36
【问题描述】:
我正在使用 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 的验证器能够看到我在测试中创建的记录?
【问题讨论】:
-
我有完全相同的问题,任何帮助将不胜感激
-
能否在您的问题中添加套件配置?
标签: php laravel transactions laravel-5 codeception