我有一个简单的测试,使用Django的RequestFactory作为视图。我的观点,设置了我想要测试的一些状态(这不是一个很好的例子,但关键是我想在处理请求之后在视图中测试一些状态而不是用HTML解析它没有充分的理由):
def some_test(self):
rf = RequestFactory()
get_request = rf.get('/foo/')
view = MyView.as_view()
response = view(
get_request,
foo="hello",
bar="world"
)
self.assertEquals( ??.sentence_to_display, "hello world")
查看内部我无法看到获取用于处理请求的视图实例的方法,??
是我在get
设置{{1}的视图实例的占位符}}
我能想到的最好的事情是在我的CBV中覆盖self.sentence_to_display
:
dispatch
然后改变我的测试,例如:
def dispatch(self, request, *args, **kwargs):
request.META["__the_view__"] = self
return super(MyView, self).dispatch(request, *args, **kwargs)
虽然我的例子是任意的,但我的CBV有很多方法可以在通过模板呈现HTML之前计算很多东西。我相信Django渲染模板,我不想测试模板,我希望在调用后测试CBV方法和实例的状态。
当我只想对def some_test(self):
rf = RequestFactory()
get_request = rf.get('/foo/')
view = MyView.as_view()
response = view(
get_request,
foo="hello",
bar="world"
)
self.assertEquals( get_request['__the_view__'].sentence_to_display, "hello world")
用于构建响应的方法进行单元测试时,我真的不想使用BeautifulSoup挖掘大量输出。
有更好的方法吗?我错过了这一点吗?
非常感谢。
Django 1.6不幸