Как правильно получить ошибки в модульном тестировании laravel и отключить проверки csrf? - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь проверить мой метод 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) Tests\Unit\ExampleTest::test_post_new_article
Expected status code 200 but received 404.
Failed asserting that false is true.

1 Ответ

1 голос
/ 11 марта 2019

Я предполагаю, что вы определили маршрут в 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 Illuminate\Foundation\Testing\WithoutMiddleware;

class MyControllerTest {
    use WithoutMiddleware;

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