我为金字塔网页框架写了一个login_required
装饰器。在金字塔测试服务器中,它运行良好。
但是在金字塔单元中,@view_config
装饰器的单元测试不适用于所有配置(不仅仅是装饰器参数)。
这是代码:
class MyViews(object):
@view_config(decorator=login_required(login_url=LOGIN_URL),
match_param="action=change_password", request_method="GET",
renderer="accounts/change_password.jinja2")
def change_password(self):
form = ChangePwdForm()
return {'form': form}
这是测试代码:
def test_change_password_fail(self):
from .views import AccountsViews
aviews = AccountsViews(testing.DummyRequest(path='/accounts/forget_password'))
response = aviews.forget_password()
self.assertEqual(response.status_code, 307) #HTTPTemporaryRedirect
我除外的是not-logined-user
将被重定向到登录网址。
@view_config
中的所有参数,例如renderer
和' match_param'不工作。
我该如何解决这个问题?
参考文献:
Mocking render to response with Pyramid
Unit and Integration Testing:金字塔官方指南,但没有提到基于类的视图的装饰问题
答案 0 :(得分:1)
@view_config()
之前, config.scan()
才会被应用。
当你进行测试时,通常你想测试一个单元,在这种情况下是视图,而不用担心框架的其余部分。
您将分别测试您的视图和装饰者。
一旦你达到更高的水平,并且想要测试金字塔是否为你的观点做正确的事情,你将需要进行集成测试。通过集成测试,您将设置完整的配置器对象,而完整的应用程序,它更加繁重,但允许您测试金字塔应用装饰器。
您想要的最后一次测试是模拟完整应用程序的完整2端测试。最新文档位于:http://docs.pylonsproject.org/docs/pyramid/en/latest/narr/testing.html