У меня есть рабочий сайт на GAE, и чтобы сохранить его, я пытаюсь добавить несколько юнит-тестов.
Одна из первых вещей, которые мне бы хотелось, это базовый тест на дым, который подтверждает, что аутентифицированный пользователь может загрузить домашнюю страницу. Вот моя попытка:
import webtest
import unittest
from google.appengine.api import users
from google.appengine.datastore import datastore_stub_util
from google.appengine.ext import ndb
from google.appengine.ext import testbed
# Handler under test
import main
from common import User
class MainTestCase(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_user_stub()
self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
probability=0)
self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
self.testbed.init_memcache_stub()
ndb.get_context().clear_cache()
def tearDown(self):
self.testbed.deactivate()
def loginUser(self, email='user@example.com', id='123', is_admin=False):
self.testbed.setup_env(
user_email=email, user_id=id,
user_is_admin='1' if is_admin else '0',
overwrite=True)
def testMainHandler(self):
User(user_email='user@testing.com', is_admin = False).put()
self.loginUser(email='user@testing.com')
self.testapp = webtest.TestApp(main.app)
response = self.testapp.get('/')
self.assertEqual(response.status_int, 200)
Когда я запускаю этот тест, я получаю 403 вместо 200 и (с небольшим копанием) зарегистрированную ошибку, что «user@testing.com не зарегистрирован». Соответствующий бит main.py здесь:
try:
active_email = users.get_current_user().email()
user_acl = User.query(User.user_email == active_email).fetch(1)[0]
security['user_exists'] = True
except IndexError:
security['user_exists'] = False
return security
Я подозреваю, что я правильно настраиваю пользователя (о чем свидетельствует зарегистрированный eror), но когда main.py запускает этот User.query, он обращается к «реальному» (пустому, во время тестирования) хранилищу данных вместо фальшивого версия тестового стенда, в которую я вставил тестового пользователя.
Это звучит правильно? Какие-нибудь советы, как сделать это лучше?