如何在webapp2处理程序单元测试中覆盖self.request.host?

时间:2016-12-20 22:10:59

标签: python unit-testing wsgi webapp2

我有一个webapp2服务器,它有两个不同的URL指向它。在我的处理程序的调度函数中,我检查请求来自哪个主机:

library(docxtractr)

docxextr <- function(pathh = ".") {
    files <- list.files(path = pathh)
    for (i in files) {
        filen <- sprintf("%s/%s", pathh, i)
        real_world <- read_docx(filen)
        docx_tbl_count(real_world) # didn't understand where this count goes?
        tbls <- docx_extract_all_tbls(real_world)
        a <- as.data.frame(tbls)
        return(a)
    }
}

在我的单元测试中,我正在启动一个本地测试应用程序并使用webapp2.Request.blank向它发出请求:

class MyHandler(webapp2.RequestHandler):

  def dispatch(self):
    if self.request.host == 'my url':
      # Do something.
    else:
      # Do something else.

我想知道是否可以在此上下文中覆盖request.host以匹配我的一个网址?现在它总是作为localhost传播:80无论我尝试过什么。感谢。

1 个答案:

答案 0 :(得分:0)

我仍然不确定我的问题是否可行但我通过扩展我的处理程序并覆盖request.host值找到了解决方法:

class TestHandler(MyHandler):
  def __init__(self, *args, **kwargs):
    super(TestHandler, self).__init__(*args, **kwargs)                                  
    self.request.host = 'my url'

test_app = webapp2.WSGIApplication([('/', TestHandler)])
request = webapp2.Request.blank('/')
response = request.get_response(test_app)