加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 通过Codeception通过存在规则测试Laravel 5路由

发布时间:2020-12-14 19:41:37 所属栏目:大数据 来源:网络整理
导读:我正在使用Codeception库为我的Laravel应用程序编写测试.我使用 Laravel5 module,并配置了cleanup,这意味着所有的测试都将在数据库事务中运行,这样我的测试数据库就不会被填满测试数据. 我正在测试的一个端点具有通过表单请求设置的以下验证规则: public fu
我正在使用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(AppModelsUser::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的验证器能够看到我在测试中创建的记录?

问题是如果没有提交事务,数据库表中的原始数据不受影响.所以在事务中,你创建两个用户,但没有提交语句会持续到你的数据库.因此,Laravel验证规则“存在”找不到它们(该规则使数据库请求找到特定的user_id).

所以在你的情况下,用户必须在测试之前存在.我建议改用Migrations. Resetting Database after each test

使用数据库迁移和种子创建表,并在测试完成后将其回滚.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读