首页 > 解决方案 > Laravel - 测试具有数据依赖关系的 API

问题描述

我正在开发一个带有身份验证的 Laravel 应用程序。该应用程序还有一个 API。现在我想测试应用程序的所有 API 端点。问题是,一些端点需要数据库中的数据来“工作”。

如何测试这样的应用程序?我是否必须以正确的顺序测试应用程序才能归档类似的东西?  

例如:  

  1. 创建用户
  2. 创建新帖子
  3. 编辑新帖子
  4. 创建新用户
  5. 用户 1 的评论帖子
  6. 使用用户 1 登录
  7. 看帖子评论
  8. 删除帖子

或者是否可以模拟这样的东西,所以我不需要特定的订单?

我看到 Laravel 已经内置了 HTTP 测试,但我不知道如何处理数据依赖关系。谢谢你的帮助!

标签: laraveltestingweb-api-testinglaravel-testing

解决方案


您可以定义 Factory 来创建模型。https://laravel.com/docs/5.8/database-testing#writing-factories 例如在我们的项目中,我们有很多工厂。他们描述了如何创建模型。 在此处输入图像描述

稍后在您的测试代码中,您只需调用$partner = factory(Partner::class)->create() 即可创建模型。

    public function testUpdate(): void
{
    /** @var Partner $partner */
    $partner = factory(Partner::class)->create();
    $name = 'Fake Partner';
    $description = 'Fake Partner Description';

    $response = $this->putJson('/partners/' . $partner->uuid, [
        'name' => $name,
        'description' => $description,
    ]);
}

要通过用户进行操作,您可以使用actingAs($user)->get( https://laravel.com/docs/5.2/testing#sessions-and-authentication

如果您的用户需要对其他“实体”的任何其他引用,您可以在用户工厂的定义中直接创建它们。

$factory->define(User::class, static function (Faker $faker) {
    return [
        'organization_id' => factory(Organization::class),
        'name' => $faker->word,
        'description' => $faker->words(3, true),
    ];
});

推荐阅读