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