2010-08-29 1 views
1

У меня есть приложение приложения Google App Engine, и мой запрос hasnler имеет декоратор, который выполняет аутентификацию. С помощью WebTest я обнаружил yesterday, как вы можете установить зарегистрированного пользователя и администратора.WebTest: тестирование с помощью декораторов + вызовы хранилища данных

Теперь сегодня мой декоратор аутентификации стал немного более сложным. Он также проверяет, имеет ли пользователь профиль в базе данных, и если он этого не сделает, он будет перенаправлен на страницу «новый пользователь».

def authenticated(method): 
    @functools.wraps(method) 
    def wrapper(self, *args, **kwargs): 
     user = users.get_current_user() 
     if not user: 
      self.redirect(users.create_login_url(self.request.uri)) 
      return 

     profile = Profile.get_by_key_name(str(user.user_id)) 
     if not profile: 
      self.redirect('/newuser') 

     return method(self, *args, **kwargs) 

    return wrapper 

Теперь добавление профиля части ломает мое модульное тестирование, который проверяет, если пользователь вошел в системе и получает код состояния 200 (assertOK).

def user_ok(self): 
    os.environ['USER_EMAIL'] = '[email protected]' 
    os.environ['USER_IS_ADMIN'] = '' 
    response = self.get('/appindex') 
    self.assertOK(response) 

Так что теперь мне нужно, чтобы иметь возможность каким-то образом придать функциональность профиля в декоратора, так что я могу установить его в моих тестах. Кто-нибудь понял, как это сделать, я пытался придумать способ, но я все время застреваю.

+0

Я думаю, что вопрос не очень понятно. Вы хотите знать, как протестировать декоратор? Что вы подразумеваете под «встраиванием функциональности профиля в декоратор»? – moraes

+0

Я имею в виду, что в своем тесте я хочу иметь возможность контролировать профиль, который я получаю из хранилища данных. Чтобы я мог проверить, что если профиль не существует, пользователь перенаправляется на новую пользовательскую страницу. – Pickels

ответ

2

Вы должны создать профиль во время теста, который будет использоваться декоратора:

def user_ok(self): 
    key_name = '[email protected]' 
    new_user = Profile(key_name=key_name) 
    new_user.put() 

    os.environ['USER_EMAIL'] = key_name 
    os.environ['USER_ID'] = key_name 
    os.environ['USER_IS_ADMIN'] = '' 
    response = self.get('/appindex') 
    self.assertOK(response) 

    # Now let's reset it to check that the user will be redirected. 
    new_user.delete() 
    response = self.get('/appindex') 
    self.assertEqual(response.headers['Location'], 'http://localhost/newuser') 
+0

Кажется, я уже немного подумал. Я в основном используется для Asp.net Mvc, и там вы отделяете все, чтобы его можно было протестировать. Но я замечаю, что в GAE тесты в основном являются интеграционными тестами. – Pickels

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

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