我開始爲我的金字塔的看法(使用webtest)編寫測試,並從Django的背景來我有一個困難時期試圖瞭解如何測試某些變量有已傳遞給模板。 例如讓我們考慮這樣的觀點:如何使用查詢模板背景金字塔+ WebTest的
@view_config(route_name='login_or_signup', renderer='login_or_signup.html')
def login_or_sign_up(request):
if request.method == 'POST':
try:
do_business_logic()
return HTTPFound(location=next)
except Invalid as e:
request.response.status_code = 400
return dict(form_errors=e.asdict())
return {}
我如何寫一個測試,證明了如果表格不正確,一個form_errors
字典傳遞到模板?在Django中我會使用context屬性,但在金字塔/ WebTest的我無法找到任何類似的......看來,模板的數據不通過響應對象訪問。我爲了訪問這些數據中發現的唯一的事情就是通過事件偵聽器:
@subscriber(BeforeRender)
def print_template_context(event):
for k, v in event.rendering_val.items():
print(k, v)
但我認爲這是不使用此方法,因爲可行:
- 這是一個全球性的聽衆
- 它具有響應對象
所以進不去......我試圖擴展基Response
類(以額外的字段附加到它):
class TemplateResponse(Response):
def __init__(self, template, template_context=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.template = template
self.template_context = template_context or {}
self.text = render(self.template, self.template_context, self.request)
,並改變原有的以:
@view_config(route_name='login_or_signup')
def login_or_sign_up(request):
if request.method == 'POST':
try:
do_buisness_logic()
return HTTPFound(location=next)
except Invalid as e:
return TemplateResponse(
'login_or_signup.html',
dict(form_errors=e.asdict()),
status=400
)
return TemplateResponse('login_or_signup.html')
但它的無奈,因爲WebTest的返回自己的TestResponse
對象,而不是我的TemplateResponse
...所以我怎麼能測試模板中的數據?