Laravel Assert Redirect Игнорирование параметров запроса - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть тест API, который утверждает для перенаправления на определенный маршрут.Проблема заключается в том, что URL-адрес перенаправления имеет параметры запроса, которые включают метку времени, которая изменяется.Интересно, есть ли в утверждениях Laravel альтернатива методу assertRedirect, который игнорирует параметры запроса.

/** @test */
    public function test_can_redirect()
    {

        $this->call('GET', "users/auth")
            ->assertRedirect('http://localhost:8000/dashboard?timestamp=1550848436');
    }

Я хочу подтвердить перенаправление на

http://localhost:8000/dashboard

, а не

http://localhost:8000/dashboard?timestamp=1550848436

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Вы можете использовать getTargetUrl для извлечения содержимого без строки запроса.

public function test_can_redirect()
{
    $redirectUrl = 'http://localhost:8000/dashboard';
    $res = $this->getJson('users/auth')->assertStatus(302); # Check if redirection
    # Or you could use this: $this->assertTrue($res->isRedirection());
    $parts = explode('?', $res->getTargetUrl());
    $this->assertTrue($parts[0] === $redirectUrl); # parts[0] is the url 
wihtout query string

    # If you want to check the keys of query string, too
    $this->assertTrue(count($parts) === 2);  # check query string exists
    parse_str($parts[1], $query);
    $this->assertArrayKeys($query, ['time', ..., 'the key you want to check']);
}

protected function assertArrayKeys(array $array, array $checks) 
{
    $keys = array_keys($array);
    foreach ($checks as $check) {
        $this->assertTrue(in_array($check, $keys));
    }
}
0 голосов
/ 22 февраля 2019

Принцип, лежащий в основе тестирования вашего кода, заключается в том, чтобы убедиться, что происходящее соответствует ожидаемому, поэтому, если вы ожидаете параметр запроса временной метки, почему бы не создать его тоже?

/** @test */
    public function test_can_redirect()
    {
        $url = "/dashboard";
        // http://php.net/manual/en/function.time.php
        $timestamp = time();

        $this->call('GET', "users/auth")
            ->assertRedirect($url . '?timestamp=' . $time);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...