Laravel - 使用数据依赖性测试 API

Laravel - Testing API with data dependencies

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

如何测试这样的应用程序?我是否必须以正确的顺序测试应用程序才能实现类似的目标?

例如:

  1. 创建用户
  2. 新建post
  3. 编辑新的post
  4. 创建新用户
  5. 用户 1
  6. 的评论 post
  7. 用用户 1 登录
  8. 查看 post
  9. 的评论
  10. 删除post

或者是否可以模拟这样的东西,这样我就不需要特定的顺序?

我看到 Laravel 内置了 HTTP 测试,但我不知道如何处理数据依赖性。 感谢您的帮助!

您可以定义工厂来创建您的模型。 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

如果您的用户需要对其他人的任何其他参考 'Entities' 您可以在用户工厂的定义中创建它们。

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