Подтвердить что ты не робот

Как проверить маршруты POST в Ларавеле

Я делаю следующее, чтобы протестировать вызов POST в Laravel. Я ожидаю, что POST на вопросы, в соответствии с моими маршрутами, будет отправлен как метод действия магазина. Это работает в браузере.

Мой тест:

public function setUp()
    {   
        parent::setUp();

        Session::start();
    }

    public function testStoreAction()
    {
        $response = $this->call('POST', 'questions', array(
            '_token' => csrf_token(),
        ));

        $this->assertRedirectedTo('questions');
    }

Однако я говорю, что перенаправление не соответствует. Кроме того, я вижу, что это не действие метода действия магазина вообще. Я хочу знать, какой метод действия он собирается и почему он не идет в метод хранилища (если я смотрю на маршрут: список, я вижу, что есть вопросы/маршрут POST, которые должны идти на questions.store; также работает в браузере, но не в моих тестах). Кроме того, я правильно пишу этот вызов для этого ресурса? Я добавил токен здесь, поскольку он бросает исключение, как и должно быть, в некоторых тестах я пропущу проверку маркера.

4b9b3361

Ответ 1

Вы можете попробовать следующее:

public function testStoreAction()
{
    Session::start();
    $response = $this->call('POST', 'questions', array(
        '_token' => csrf_token(),
    ));
    $this->assertEquals(302, $response->getStatusCode());
    $this->assertRedirectedTo('questions');
}

Ответ 2

Наиболее рекомендуемым способом проверки ваших маршрутов является проверка ответа 200. Это очень полезно, если у вас есть несколько тестов, например, вы проверяете все ваши маршруты post сразу.

Для этого просто используйте:

public function testStoreAction()
{
    $response = $this->call('POST', 'questions', array(
        '_token' => csrf_token(),
    ));

    $this->assertEquals(200, $response->getStatusCode());
}

Ответ 3

Корпуса Laravel Unit без промежуточного программного обеспечения

    use WithoutMiddleware;

    protected $candidate = false;

    public function setUp(): void
    {
        parent::setUp();        

        $this->candidate = new Candidate();
    }   

    /** @test */
    public function it_can_get_job_list()
    {
        $this->actingAs($this->user, 'api');

        $response = $this->candidate->getJobsList();

        $this->assertNotNull($response);

        $this->assertArrayHasKey('data', $response->toArray());

        $this->assertNotEmpty($response);

        $this->assertInternalType('object', $response);
    }

Ответ 4

Я получил TokenMismatchException и это исправило его, может быть, оно вам тоже поможет

public function testStoreAction()
{
    $response = $this->withSession(['_token' => 'covfefe'])
        ->post('questions', [
            '_token' => 'covfefe',
        ));

    $this->assertRedirectedTo('questions');
}