Python 如何使视图\配置装饰器与金字塔单元测试一起工作?
我为金字塔web框架编写了一个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
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.现在我只是手工添加请求方法和属性:)。阅读源代码太抽象了。我放弃了,因为时间有限:)