我正在使用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);
- }
此测试总是失败.调查后,我可以看到它失败,因为请求失败验证由于存在:用户,id规则.如果我将Codeception设置更改为不在事务中执行测试,Laravel的验证器可以成功地查看我在测试开始时创建的两个用户的存在,并且测试通过.
所以我的问题是,有没有什么办法可以保持在数据库事务中包装每个测试的行为,并且Laravel的验证器能够看到我在测试中创建的记录?