@knowledge

Как протестировать request через codeception в laravel?

есть метод username
public function username()
    {
        $value = request()->input('login');
        $field = filter_var($value, FILTER_VALIDATE_EMAIL) ? 'email' : 'name';

        request()->merge([$field => $value]);

        return $field;
    }


хочу покрыть его тестами, тест такой
public function usernameFieldTest(UnitTester $I)
    {
        $name = 'john';
        $email = 'john@mail.ru';

        $loginController = new \App\Http\Controllers\Auth\LoginController();

        $request = new Request();

        $request->merge(['login' => $name]);
        $I->assertEquals('name', $loginController->username());

        $request->merge(['login' => $name]);
        $I->assertEquals('email', $loginController->username());
    }


Ошибка [ReflectionException] Class request does not exist на поле $I->assertEquals('name', $loginController->username());
соответственно ошибка в том, что из теста не находит метод request() внутри тестируемого метода.
создавать в методе username() реквест через new Request нельзя, т.к. он уже должен существовать

Идеально было бы пробросить реквест username(Request $request) но этот метод переопределяет метод из вендорной библиотеки laravel, поэтому нельзя это добавить
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
У Вас в маетоде username класса LoginController указан Request $request ?
Скорее всего Вы не передали $request в один из параметров username().
$I->assertEquals('name', $loginController->username($request));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы