gpt4 book ai didi

laravel-5 - 使用工厂测试 Laravel post 请求

转载 作者:行者123 更新时间:2023-12-02 03:19:50 25 4
gpt4 key购买 nike

我正在为我的 Laravel 应用程序编写一些功能测试。我是 TDD 新手,所以这对某些人来说可能是显而易见的。

LocationsFactory.php

use Faker\Generator as Faker;

$factory->define(App\Location::class, function (Faker $faker) {
return [
'name' => $faker->name,
];
});

LocationsTest.php

public function a_user_can_create_a_location(): void
{
$this->withExceptionHandling();

$user = factory(User::class)->make();
$location = factory(Location::class)->make();


$response = $this->actingAs($user)->post('/locations', $location); // $location needs to be an array

$response->assertStatus(200);
$this->assertDatabaseHas('locations', ['name' => $location->name]);
}

TypeError: Argument 2 passed to Illuminate\Foundation\Testing\TestCase::post() must be of the type array, object given

我知道错误告诉我 $location 需要是一个数组,并且它是一个对象。然而,由于我使用的是工厂,它作为一个对象出现。有没有更好的方法在我的测试中使用工厂?

这似乎也有点不对:

$this->assertDatabaseHas('locations', ['name' => $location->name]);

由于我使用 faker,所以我不知道名称是什么。所以我只是检查生成的内容是否理想?

谢谢您的建议!

编辑

做这样的事情效果很好(也许这就是解决方案)...

...
$user = factory(User::class)->make();
$location = factory(Location::class)->make();

$response = $this->actingAs($user)->post('/locations', [
'name' => $location->name
]);

$response->assertStatus(200);
$this->assertDatabaseHas('locations', ['name' => $location->name]);

但是,假设我的位置 有 30 个属性。看起来它很快就会变得丑陋。

最佳答案

Laravel 5

使用 toArray() 进行对象到数组的转换:请参阅以下示例

    $user = factory(User::class)->make();
$location = factory(Location::class)->make();

$response = $this->actingAs($user)->post('/locations', $location->toArray());

$response->assertStatus(200);
$this->assertDatabaseHas('locations', ['name' => $location->name]);

关于laravel-5 - 使用工厂测试 Laravel post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com