Как дождаться перезагрузки страницы в интеграционном тестировании Laravel

#php #laravel #testing

#php #laravel #тестирование

Вопрос:

У нас есть действие для редактирования профиля пользователя, который перенаправляет на ту же страницу. Здесь seePageIs(), похоже, не ожидает загрузки новой страницы.

Следующий тест завершается неудачей, так как новое имя пользователя не найдено в ответе. Когда мы загружаем страницу профиля вручную после теста, она была обновлена должным образом.

 public function testCanEditUserProfileAsConsumer()
{
    $this->loginConsumer();

    $this->visit('/user/profile');
    $firstName = $this->faker->firstname;
    $name = $this->faker->name;


    $this->within('#userEditForm', function() use ($firstName, $name) {
        $this->type($firstName, 'firstname');
        $this->type($name, 'surname');
        $this->press('Speichern');
    });

    // here: how to wait for page reload ?
    $this->seePageIs('/user/profile');
    $this->see($firstName);
    $this->see($name);
}
  

Редактировать

     $this->within('#userEditForm', function() use ($firstName, $lastname) {
        $this->type($firstName, 'firstname');
        $this->type($lastname, 'surname');
        $this->press('Speichern')
            ->seePageIs('/user/profile')
            ->see($firstName)
            ->see($lastname);
    });
  

также не работает

Комментарии:

1. Переместите свой код внутри и соедините его с помощью нажатия (возможно). В общем, вы, похоже, не ждете после вызова press.

Ответ №1:

Проблема была в другом. Laravel перезагружает страницу при нажатии кнопки.

В представлении профиля пользователя мы используем Auth::user() для отображения информации.

Когда я делаю

     Auth::setUser(Auth::user()->fresh());
  

в пользовательском контроллере это работает.

Не очень удовлетворительное решение, но оно проясняет исходный вопрос.