laravel - Laravel - 测试具有数据依赖关系的 API
问题描述
我正在开发一个带有身份验证的 Laravel 应用程序。该应用程序还有一个 API。现在我想测试应用程序的所有 API 端点。问题是,一些端点需要数据库中的数据来“工作”。
如何测试这样的应用程序?我是否必须以正确的顺序测试应用程序才能归档类似的东西?
例如:
- 创建用户
- 创建新帖子
- 编辑新帖子
- 创建新用户
- 用户 1 的评论帖子
- 使用用户 1 登录
- 看帖子评论
- 删除帖子
或者是否可以模拟这样的东西,所以我不需要特定的订单?
我看到 Laravel 已经内置了 HTTP 测试,但我不知道如何处理数据依赖关系。谢谢你的帮助!
解决方案
您可以定义 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),
];
});
推荐阅读
- python - 无法通过终端安装“rasa_nlu”
- string - 如何在颤动中通过多个分隔符分割字符串?
- postgresql - Connecting Local DB to DBeaver
- c# - How to get TypeConverter when using Source Generators
- swiftui - Adding element to array forces view update
- reactjs - Jest-Expo 在示例上崩溃(React.createElement:类型无效 - 应为字符串)
- django - 如何获取模型表单的值并将其分配给另一个模型表单中的键
- php - 如何更新购物篮并更改多维数组中的产品数量?
- traefik - 如何在本地在 Traefik 上设置 HTTPS?
- c# - 当其他 TextBox TextChanged 在同一列表框项 WPF 内触发时,从 ListBox 项更新 TextBox 文本