Laravel Forgen Key не проходит тесты - PullRequest
0 голосов
/ 18 марта 2019

Я работаю через TDD в Laravel. У меня есть фабрика Location, которая выглядит так:

LocationFactory

$factory->define(Location::class, function (Faker $faker) {
return [
    'owner_id' => function () {
        return factory(User::class)->create()->id;
    },
    'name' => $faker->company,
    ...
    ];
});

Мой тест выглядит так:

LocationTest

// Allow Laravel to handle the exception.
$this->withExceptionHandling();

// Create an authenticated user instance.
$user = factory(User::class)->create();

// Create the location instances via a factory.
$location = factory(Location::class)->create();

// An authenticated user can send a POST request to /locations to create a new location.
$response = $this->actingAs($user)->post('/locations', $location->toArray());

// Assert the system should persist the data to the database.
$this->assertDatabaseHas('locations', [
    'id' => $location->id,
    'owner_id' => $location->owner_id,
    'name' => $location->name,
    'description' => $location->description,
    'address' => $location->address,
    'address2' => $location->address2,
    'city' => $location->city,
    'state' => $location->state,
    'zip' => $location->zip,
    'created_at' => $location->created_at,
    'updated_at' => $location->updated_at,
    'deleted_at' => null,
]);

// Assert the response.
$response->assertSessionHasNoErrors();
$response->assertStatus(200);

Ошибка, которую я получаю, довольно очевидна:

[
    "The owner id field is required."
]
Failed asserting that true is false.

Однако я знаю, что я получаю owner_id в моих тестах:

dd($location);

 #original: array:12 [
     "owner_id" => 665
     ...

Вот фрагмент моего контроллера - как я сохраняю местоположение.

LocationController

$attributes = $request->validate([
    'owner_id' => 'required',
    'name' => 'required',
    ...
]);

$location = Location::create($attributes);
$location->owner_id = auth()->id();
$location->save();

Модель "Мое местоположение" выглядит следующим образом:

protected $fillable = [
    'name', 'description', 'address', 'address2', 'city', 'state', 'zip',
];

/**
 * The attributes that aren't mass assignable.
 *
 * @var array
 */
protected $guarded = [
    'owner_id',
];

Используя телескоп Я вижу, что owner_id отсутствует в массиве. Я не уверен, что я делаю неправильно.

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

Редактировать

Проверка моей миграции, чтобы убедиться, что поле там есть:

$table->unsignedInteger('owner_id');

Глядя прямо на необработанную базу данных, я вижу, что столбец существует и содержит данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...