2014-02-09 1 views
2

Я пытаюсь написать модульный тест для моей колбы приложения для OpenID, но при вызовеКолба OpenID UnitTest

oid.try_login(<oid provider>, <params>)

Я получаю сообщение об ошибке:

RuntimeError: <class 'flask.testing.FlaskClient'> does not support redirect to external targets

Так, как каждые хорошие SO, я огляделся по некоторым решениям:

  1. Поставщик маскировки с использованием расширения колбы NoExtRef. Я не уверен, что это возможно на уровне приложения, так как я предполагаю, что флеш-openid messes связан с urid-адресом (и он просто перенаправил меня на исходную страницу, когда я попробовал). Но это кажется довольно уродливым, так как я делаю изменение кода строго для unittest.
  2. Создайте свой собственный сервер OID, но это все равно может быть внешним перенаправлением (я попробую это позже, как только я получу отчаяние).

Я предполагаю, что другая альтернатива заключается в том, чтобы игнорировать письменные тесты для входа в систему и просто установить пользователя в Flask.g, используя классную проверку флагов. Но я бы предпочел сохранить тесты модуля входа в систему.

ответ

1

Существует альтернатива - обезьяна патч try_login метода, продолжение открытого идентификаторам:

class LoginTestMonkeyPatch(object): 
    def __init__(self, oid=None, default_response=None): 
     self.response = default_response 
     if oid is not None: 
      self.init(oid) 

    def init(self, oid): 
     oid.try_login = self.try_login 


    def try_login(self, *args, **kwargs): 
     # Do whatever you want to do here 
+0

Подозрительный ответ, но этот подход работал очень хорошо. Спасибо, что познакомил меня с патчем обезьян! – rith87

0

Если вы заплаты логина, вы можете не испытывать его.

У меня была та же проблема. Для меня лучшим решением было отключить «лог в требуемой» части представления.

Я не знаю, если вы используете КОЛБУ Логин, но если вы можете обойти @login_required, так что вам даже не нужно беспокоиться о попытке войти в систему пользователю что-то вроде:

def setUp 
    env = Environments(app) 
    env.from_object('config.Testing') 
    lm = LoginManager() 
    lm.init_app(app) 
    self.app = app.test_client() 

Просто мысль, я надеюсь, что это поможет вам или кому-то еще :)

PS Это мой первый пост в Stack Overflow. Благодаря всем плакатам, которые мне так помогли!

 Смежные вопросы

  • Нет связанных вопросов^_^