我正在使用下面的代码测试MainHandler。
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}}
我想测试模板及其变量
我如何测试是否正确收到姓名?
我可以使用一些属性来执行断言,或者这应该以另一种方式完成?
答案 0 :(得分:1)
这基本上就是你在断言中已经做过的事情。由于客户端实例正在拉动渲染模板,因此无法匹配模板变量。通过在模板中使用kwargs,它将这些kwargs渲染到模板中 - 其中{{name}}是'world'(预期输出),您的模板变量已被接收并呈现。
如果你需要测试特定的输出,一个相当不优雅的解决方案可能是为每个变量分配一个无意义的<div>
标签(即<div name="name">{{name}}</div>
),然后使用assertIn
方法(即,self.assertIn(self.response.body, '<div name="name">world</div>')
)来测试正确的输出。