#unit-testing #laravel-5 #phpunit
#модульное тестирование #laravel-5 #phpunit
Вопрос:
Я пытаюсь протестировать свой post
метод в контроллере. Определение метода выглядит примерно так :
public function store(Request $request)
{
$article = new Article;
$article->id = $request->input('article_id');
$article->title = $request->input('title');
$article->body = $request->input('body');
return response(["success"], 200);
}
Я создал тест, который просто сохраняет данные и проверяет, равен ли ответ 200.
Пожалуйста, также покажите мне, как я могу улучшить этот тест для новичков в тестировании. Но я получаю 404 error
Я не знаю, в чем ошибка. Как я могу отобразить ошибки, какие настройки мне нужно настроить?
Тест:
public function test_post_new_article(){
$article = factory(Article::class)->make();
$this->call('POST', 'article', [
'_token' => csrf_token(),
'article_id' => 6,
'title'=>"hey",
'body' => "this is a body"
])->assertStatus(200);
}
ошибка phpunit:
There was 1 failure:
1) TestsUnitExampleTest::test_post_new_article
Expected status code 200 but received 404.
Failed asserting that false is true.
Ответ №1:
Я предполагаю, что вы определили маршрут в routes/api.php
таким образом, чтобы префикс вашего конкретного маршрута был /api/
.
Вы должны вызвать полный путь к маршруту API:
$this->call('POST', '/api/article', [
'_token' => csrf_token(),
'article_id' => 6,
'title'=>"hey",
'body' => "this is a body"
])->assertStatus(200);
Кроме того, поскольку CSRF должен быть реализован на вашем уровне промежуточного программного обеспечения, а добавлять _token
ко всем вашим тестовым запросам утомительно и глупо, вам, вероятно, следует просто отключить промежуточное программное обеспечение в ваших тестах:
use IlluminateFoundationTestingWithoutMiddleware;
class MyControllerTest {
use WithoutMiddleware;
... public function testmyUnitTest() { ... }
}
Комментарии:
1. о, это действительно полезно… не могли бы вы также, пожалуйста, помочь мне с моей ошибкой?… Я включил отображение ошибок, но безуспешно.
2. @ReyYoung Если вы замените свою
$this->call
строку на ту, которую я предоставил, это должно исправить вашу ошибку 404.