Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使视图\配置装饰器与金字塔单元测试一起工作?_Python_Unit Testing_Web_Pyramid_Web Frameworks - Fatal编程技术网

Python 如何使视图\配置装饰器与金字塔单元测试一起工作?

Python 如何使视图\配置装饰器与金字塔单元测试一起工作?,python,unit-testing,web,pyramid,web-frameworks,Python,Unit Testing,Web,Pyramid,Web Frameworks,我为金字塔web框架编写了一个login\u requireddecorator。在金字塔测试服务器中,它运行良好 但是在@view\u config装饰器的金字塔单元测试中,装饰器并不适用于所有配置(不仅仅是装饰器参数) 代码如下: class MyViews(object): @view_config(decorator=login_required(login_url=LOGIN_URL), match_param="action=change_passw

我为金字塔web框架编写了一个
login\u required
decorator。在金字塔测试服务器中,它运行良好

但是在
@view\u 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
我所期望的是,
未登录的用户
将被重定向到登录url。
@view_config
中的所有参数,如
渲染器
和“match_param”都不起作用

我怎样才能解决这个问题

参考文献:

:Pyramid官方指南,但未提及基于类的视图的装饰器问题

@view\u config()
在运行
config.scan()之前不会应用

当您进行测试时,通常您希望测试单个单元,在本例中是视图,而不必担心框架的其余部分

您需要分别测试视图和装饰器

一旦您达到了更高的级别,并且想要测试金字塔是否适合您的视图,您将需要进行集成测试。通过集成测试,您将设置完整的configurator对象和完整的应用程序,这将更加繁重,但允许您测试金字塔是否应用了装饰器


最后需要的测试是模拟完整应用程序的完整端2端测试。最新文档位于:

感谢您的回答。但不幸的是,您提到的文档没有关于如何测试装饰器的内容。我使用了config.include,在这之后,有些东西可以工作(比如
add\u指令
),有些东西不行(比如
add\u请求方法
)。金字塔的虚拟请求对象有问题。我只能手动添加它,例如添加
matchdict
等等。您是否尝试调用
config.scan('.views')
?我会尝试建立一个例子,看看我是否能想出如何测试这样的东西。
webtest
应该可以工作,因为它可以端到端地测试应用程序。是的,我做到了:),扫描只需添加视图配置,但是设置对虚拟请求对象不起作用。Pyramid不会向view callable.URL传递任何参数,Dispatch也不会起作用,view_config.Pyramid的officall文档也不会假设我们使用Pyramid.request.request来做这件事。Pyramid的officall github中没有任何关于如何测试URL分派和decoraotr的测试示例repo.现在我只是手工添加请求方法和属性:)。阅读源代码太抽象了。我放弃了,因为时间有限:)