Ich habe eine wirklich einfache Web-App. Alle wichtigen Sachen passiert in index.py:Testen der lokalen Einheit für Google App Engine + Python WebApp2
from google.appengine.api import users
import webapp2
import os
import jinja2
JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)
def get_user():
user = {}
user['email'] = str(users.get_current_user())
user['name'], user['domain'] = user['email'].split('@')
user['logout_link'] = users.create_logout_url('/')
return user
class BaseHandler(webapp2.RequestHandler):
def dispatch(self):
user = get_user()
template_values = {'user': user}
if user['domain'] != 'foo.com':
template_values['page_title'] = 'Access Denied'
template = '403'
else:
template_values['page_title'] = 'Home'
template = 'index'
template_engine = JINJA_ENVIRONMENT.get_template('%s.html' % template)
self.response.write(template_engine.render(template_values))
app = webapp2.WSGIApplication([
('/', BaseHandler),
], debug=True)
Ich versuche, ein guter Mensch zu sein und einige lokale Unit-Tests zu schreiben, aber - nachdem sie an der documentation suchen - ich bin total aus meiner Tiefe. Alles was ich will ist ein Grundgerüst, wo ich so etwas tun kann:
python test_security.py
und simulieren zwei Benutzer die Domäne schlagen - ein @ foo.com, die den Index-Vorlage bekommen sollte, und ein @ bar.com wer sollte erhalten die Vorlage 403.
Hier ist, wo ich bisher habe:
import sys
# I don't want to talk about it, let's just ignore this block
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2')
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\webob-1.2.3')
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6')
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\yaml-3.10')
sys.path.append('C:\Program Files (x86)\Google\google_appengine\lib\jinja2-2.6')
sys.path.append('C:\Program Files (x86)\Google\google_appengine')
sys.path.append('C:\pytest')
# A few proper imports
import unittest
import webapp2
from google.appengine.ext import testbed
# Import the module I'd like to test
import index
class TestHandlers(unittest.TestCase):
def test_hello(self):
self.testbed = testbed.Testbed()
self.testbed.init_user_stub()
self.testbed.setup_env(USER_EMAIL='[email protected]',USER_ID='1', USER_IS_ADMIN='0')
request = webapp2.Request.blank('/')
response = request.get_response(main.app)
print "running test"
self.assertEqual(response.status_int, 200)
self.assertEqual(response.body, 'Hello, world!')
Vorhersagbar dies nicht funktioniert überhaupt nicht. Was vermisse ich? Überschätze ich einfach, wie einfach das sein sollte?
Was "funktioniert überhaupt nicht" bedeutet genau? –
"laufender Test" gibt nie aus - also während ich denke, dass ich den Test definiert habe, bin ich mir nicht sicher, was ich tun muss, um ihn auszuführen. Ich bin mir sicher, dass ich Fehler bekommen werde, wenn ich versuche, es zum Laufen zu bringen, aber es einfach zu machen, wäre ein schöner erster Schritt :) – mcl