2012-03-28 41 views
0

我使用下面的代码测试MainHandler。Tornadoweb中使用的测试模板和变量

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() 

的template.html:

Hello, {{name}} 

我想测试模板,它的变量。
如何测试名称是否被正确接收?

有一些属性可以用来做断言,或者这应该以另一种方式完成?

回答

1

这基本上就是你在断言中所做的。由于客户端实例正在拉动呈现的模板,因此无法匹配模板变量。通过在模板中使用您的kwargs,它将这些kwargs渲染到模板中,其中{{name}}是'world'(预期的输出),您的模板变量已经被接收和渲染。

如果需要测试特定的输出,一个相当不雅解决方案可以是每个变量分配一个无意义<div>标签(即,<div name="name">{{name}}</div>),然后使用assertIn方法(即,self.assertIn(self.response.body, '<div name="name">world</div>'))来测试正确的输出。