Как выйти из системы в рамках одного теста в тестировании Laravel? - PullRequest
0 голосов
/ 07 ноября 2018

Laravel v5.7.1

У меня есть несколько тестов с одинаковыми утверждениями, и я хочу переместить их в одну функцию и вызвать ее из тестов. Вот пример функции:

private function admin_only($url, $method = 'GET', $data = []) {
    // \Auth::logout();
    $response = $this->json($method, $url, $data);
    $response->assertStatus(401);
    $response = $this->actingAs($this->user(),'api')->json($method, $url, $data);
    $response->assertStatus(403);

    $response = $this->actingAs($this->admin(),'api')->json($method, $url, $data);
    $response->assertStatus(200);
}

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

$this->admin_only('/api/service/toggle-state', 'POST', $data);
$this->admin_only('/api/service/toggle-state', 'POST', $data);

И второй вызов в том же тесте приводит к сбою, поскольку первый $this->json() используется как администратор и возвращает код успеха.

Это \Auth::logout() должно решить проблему, но вместо этого выдает ошибку BadMethodCallException: Method Illuminate\Auth\RequestGuard::logout does not exist.

Решения, такие как «Отдельный тест для второго вызова», «Нет переключения назад», «Тот же код ответа для пользователей и гостей, не являющихся администраторами, должны работать, но для меня это неправильно.

1 Ответ

0 голосов
/ 07 ноября 2018

может быть, у вас разные охранники >> так что это может сработать

Auth::guard('admin')->logout();

вы можете изменить 'admin' на любое имя охранника

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