Я пытаюсь создать тест на API отдыха, используя Laravel. Мой тест состоит из 3 этапов: организовать, действовать и утверждать. На первом этапе я создаю запись в базе данных. Для второго теста я запрашиваю свою БД, наконец, я проверяю, верны ли тесты или нет.
use RefreshDatabase;
/** @test */
public function createTest() {
// Arrange : name & message OK
$message = ChatMessages::create([
'username' => 'My name is long enough',
'message' => 'my message is also OK'
]);
// Act
$getAllMessages = ChatMessages::all();
$this->post('/message', $message->toArray())
->assertStatus(200)
->assertExactJson([
'status' => 'ok', 'chat_message' => $message->toArray()
]);
// assert : if name too short, data is not persisted
$this->assertEquals(sizeof($getAllMessages), 1);
}
Мой маршрут:
Route::post('/message', 'ChatController@create');
У меня есть следующее сообщение об ошибке:
Ожидаемый код состояния 200, но получен 404. Не удалось подтвердить, что false - true.
В моем контроллере у меня есть этот код:
public function create(Request $request) {
$input = $request->validate([
'username' => 'required|string|min:3|max:255',
'message' => 'required|string|min:1',
]);
try {
$message = ChatMessages::create([
'username' => $input['username'],
'message' => $input['message'],
]);
} catch (\Exception $err) {
Log::error("Cannot fetch chat messages");
Log::error($err);
abort(500);
}
return response()->json(['status' => 'ok', 'chat_message' => $message]);
}
$ request-> validate должен дать перенаправление 302, если не выполнено, и 200, если все в порядке.