Запись базы данных не сохраняется во время модульных тестов при проверке запроса - PullRequest
1 голос
/ 09 марта 2020
$post= factory(Model)->make();
$this->post(route("post.store", $post->toArray()))->assertSee($model->name);
$this->assertDatabaseHas($this->table, $model->toArray());

Этот код работает. Но если мы смоделировали запрос:

$this->mock(PostRequest::class, function ($mock) {
   $mock->shouldReceive('passes')->andReturn(true);
});

, в этом случае возвращается пустая ошибка базы данных

Таблица пуста ..

Цитата

Как это может быть?

Ответы [ 2 ]

1 голос
/ 09 марта 2020

У вас ничего нет в базе данных, так как вы на самом деле ничего не сохраняете там. Я предполагаю, что в post.store контроллере у вас есть логика c для сохранения этого model, и поэтому он проходит.

В своем макете вы ничего не сохраняете в базе данных, вы просто говорите, что получаете passes и возвращаете true, и больше ничего не происходит, поэтому ничего не сохраняется в базе данных, которая причина, по которой $this->assertDatabaseHas($this->table, $model->toArray()); скажет вам, что модель не сохраняется, поскольку она проверяет содержимое тестовой базы данных.

Надеюсь, это поможет.

0 голосов
/ 09 марта 2020

Метод make не сохраняет запись в базу данных, он просто создает модель. Вместо этого используйте метод create, чтобы сохранить его в базе данных.

Измените это:

$post= factory(Model)->make();

На это:

$post= factory(Model)->create();
...