Laravel - 使用数据依赖性测试 API
Laravel - Testing API with data dependencies
我正在开发一个带身份验证的 Laravel 应用程序。该应用程序还有一个 API。
现在我想测试应用程序的所有 API 端点。问题是,一些端点需要数据库中的数据 "work" with.
如何测试这样的应用程序?我是否必须以正确的顺序测试应用程序才能实现类似的目标?
例如:
- 创建用户
- 新建post
- 编辑新的post
- 创建新用户
- 用户 1
的评论 post
- 用用户 1 登录
- 查看 post
的评论
- 删除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),
];
});
我正在开发一个带身份验证的 Laravel 应用程序。该应用程序还有一个 API。 现在我想测试应用程序的所有 API 端点。问题是,一些端点需要数据库中的数据 "work" with.
如何测试这样的应用程序?我是否必须以正确的顺序测试应用程序才能实现类似的目标?
例如:
- 创建用户
- 新建post
- 编辑新的post
- 创建新用户
- 用户 1 的评论 post
- 用用户 1 登录
- 查看 post 的评论
- 删除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),
];
});