Я использую токены JWTAuth для аутентификации. В тестах я передавал токен на каждый запрос после его получения после аутентификации, но когда несколько конкретных тестов нужно было запускать на множестве разных пользователей в цикле, тесты, которые работали для одиночных пользователей, начали сбой, что не имело смысла.Laravel 5.3 Провайдер сервисной службы PHPUnit, поддерживаемый между запросами
Через регистрацию я вижу, что независимо от того, что я вызываю выход из системы, поставщик услуг, который я использую для каждого запроса, чтобы получить аутентифицированного пользователя, строится только по первому запросу, а затем, похоже, сохраняется. Поэтому, несмотря на то, что пользователь вышел из системы, и новый пользователь вошел в систему и имеет новый токен, поставщик услуг не повторно создается для каждого запроса, как в производственном приложении.
Есть ли способ, чтобы поставщик услуг не сохранялся или сохранялся между запросами? Я заметил, что через отладку мне даже не нужно было передавать токен после входа на сервер на последующих аутентифицированных маршрутах, поскольку он просто повторно использует сохраненные данные в поставщике услуг.
Пример ниже работает для любого пользователя, но при повторении нескольких пользователей правило, что один пользователь не может иметь два открытых приложения, бросает и указывает, что первый пользователь все еще используется на второй итерации.
public function applicant_can_prequalify_if_age_of_majority_for_province_or_older()
{
// Arrange
$this->runPrequalifySeeders();
$provinces = Province::select('id', 'name', 'majority_age')->get();
$provinces->each(function ($province) {
// Act
$provinceName = str_replace(' ', '', strtolower($province->name));
$username = "{$provinceName}@example.com";
$applicant = $this->createApplicant($username);
$this->login($applicant->username);
Log::info($applicant->username); // correct username: check
Log::info($this->token); // different token each time: check
// Applicants can only have one application at a time hence the
// new user for each iteration per province: fails on second
// iteration as service container persisted... I think
$application = $this->createNewApplication()->decodeResponseJson();
// Removed for brevity...
$this->logout();
});
}
UPDATE
В случае это было связано с использованием each
я приклеил ЗАЯВЛЕНИЯ пару раз и сдвинуты провинцию от коллекции, и он все еще думает, что в Act 2
что пользователь Act 1
аутентифицируется.
// Act 1
$province = $provinces->shift();
$provinceName = str_replace(' ', '', strtolower($province->name));
$username = "{$provinceName}@example.com";
$this->createApplicant($username)->login($username);
$application = $this->createNewApplication()->decodeJson();
// Removed for brevity
$this->logout();
// Act 2
$province = $provinces->shift();
$provinceName = str_replace(' ', '', strtolower($province->name));
$username = "{$provinceName}@example.com";
$this->createApplicant($username)->login($username);
$application = $this->createNewApplication()->decodeJson();
// Removed for brevity
$this->logout();
UPDATE 2
Даже если я выход из методов на сервере, в настоящее время вызывается в качестве конечных точек поражаются, как вход, выход, и т.д. Я хотел проверить на выходе из системы был на самом деле работающий и занесенный в черный список токен, и он основан на этом тесте, который вызывает ошибку Unauthenticated
401 после того, как будет достигнута вторая цель создания новой конечной точки приложения. Так что действительно кажется, что поставщик услуг не очищается.
// Act
$province = $provinces->shift();
$provinceName = str_replace(' ', '', strtolower($province->name));
$username = "{$provinceName}@example.com";
$this->createApplicant($username)->login($username);
$application = $this->createNewApplication()->decodeJson();
$this->logout();
// 401 server response since token was successfully blacklisted
$application = $this->createNewApplication()->decodeJson();
Хорошо, просто небольшой комментарий, а не ответ, я обычно подозреваю поведение функции 'each()'. –
Я проверил это, отказавшись от использования 'each' и просто вставив внутренние утверждения пару раз, чтобы имитировать цикл, и в каждом пасте установить' $ province = $ provinces-> shift(); 'поэтому ничего не изменилось. Он по-прежнему считает, что первый пользователь вошел в систему, поскольку он проходит через второй вставной набор операторов. – mtpultz