Тестирование почтовых запросов Laravel с использованием Factory - PullRequest
0 голосов
/ 13 марта 2019

Я пишу некоторые функциональные тесты для моего приложения 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]);
}

Ошибка типа: аргумент 2 принятдля подсветки \ Foundation \ Testing \ TestCase :: post () должен иметь тип массива, объект задан

Я понимаю, что ошибка говорит мне, что $location должен быть массивом, и этообъект.Тем не менее, поскольку я использую фабрику, она становится объектом.Есть ли лучший способ использовать фабрику в моем тесте?

Это также выглядит немного не так:

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

Поскольку я использую фейкер, я не знаю, что за nameбудет.Так что я просто проверяю, что было сгенерировано, это идеально?

Спасибо за любые предложения!

РЕДАКТИРОВАТЬ

Делать что-то вроде этого работаетхорошо (и, возможно, это решение) ...

...
$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]);

Однако, скажем, мой location имеет 30 атрибутов.Кажется, что это может быть ужасно быстро.

1 Ответ

0 голосов
/ 13 марта 2019

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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...