2012-03-28 4 views
0

Ich teste den MainHandler mit dem folgenden Code.In Tornadoweb verwendete Testvorlagen und Variablen

import tornado.httpserver 
import tornado.httpclient 
import tornado.ioloop 
import tornado.web 
import unittest 

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     kwargs = {'name' : 'world'} 
     self.render('template.html', **kwargs) 

class TestTornadoWeb(unittest.TestCase): 
    http_server = None  response = None 

    def setUp(self): 
     application = tornado.web.Application([ 
       (r'/', MainHandler), 
       ]) 
     self.http_server = tornado.httpserver.HTTPServer(application) 
     self.http_server.listen(8888) 

    def tearDown(self): 
     self.http_server.stop() 

    def handle_request(self, response): 
     self.response = response 
     tornado.ioloop.IOLoop.instance().stop() 

    def testHelloWorldHandler(self): 
     http_client = tornado.httpclient.AsyncHTTPClient() 
     http_client.fetch('http://localhost:8888/', self.handle_request) 
     tornado.ioloop.IOLoop.instance().start() 
     self.failIf(self.response.error) 
     self.assertEqual(self.response.body, 'Hello, world') 

if __name__ == '__main__': 
    unittest.main() 

Die template.html:

Hello, {{name}} 

Ich will testen Sie die Vorlage und seine Variablen.
Wie kann ich testen, ob der Name korrekt empfangen wurde?

Es gibt einige Attribute, die ich verwenden kann, um die Behauptungen zu tun, oder dies sollte anders gemacht werden?

Antwort

1

Das ist im Wesentlichen, was Sie bereits in Ihrer Behauptung tun. Da die Clientinstanz die gerenderte Vorlage zieht, können Sie die Vorlagenvariable nicht zuordnen. Wenn Sie Ihre Kwargs in der Vorlage verwenden, werden diese Kwargs in die Vorlage gerendert. Wo {{name}} "world" (die erwartete Ausgabe) ist, wurde Ihre Vorlagenvariable empfangen und gerendert.

Wenn Sie spezifische Leistung testen müssen, eine ziemlich unelegant Lösung könnte sein, jedes Variablen zuweisen einen bedeutungs <div> Tag (das heißt, <div name="name">{{name}}</div>) und verwenden Sie dann die assertIn Verfahren (das heißt self.assertIn(self.response.body, '<div name="name">world</div>')) für die korrekte Ausgabe zu testen.

Verwandte Themen