如何使view_config装饰器与金字塔单元测试一起工作?

时间:2014-11-12 07:27:25

标签: python unit-testing web pyramid web-frameworks

我为金字塔网页框架写了一个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:金字塔官方指南,但没有提到基于类的视图的装饰问题

1 个答案:

答案 0 :(得分:1)

在您运行@view_config()之前,

config.scan()才会被应用。

当你进行测试时,通常你想测试一个单元,在这种情况下是视图,而不用担心框架的其余部分。

您将分别测试您的视图和装饰者。

一旦你达到更高的水平,并且想要测试金字塔是否为你的观点做正确的事情,你将需要进行集成测试。通过集成测试,您将设置完整的配置器对象,而完整的应用程序,它更加繁重,但允许您测试金字塔应用装饰器。

您想要的最后一次测试是模拟完整应用程序的完整2端测试。最新文档位于:http://docs.pylonsproject.org/docs/pyramid/en/latest/narr/testing.html