【问题标题】:Mocking render to response with Pyramid使用 Pyramid 模拟渲染以响应
【发布时间】:2014-08-13 21:52:54
【问题描述】:

我有一个看起来像这样的装饰器:

def validate_something(func):
    def validate_s(request):
        if request.property:
            render_to_response('template.jinja', 'error'
        return func(request)
    return validate_something

我正在尝试像这样测试它。我将本地 WSGI 堆栈作为应用程序加载。

from webtest import TestApp 
def setUp(self):
     self.app = TestApp(target_app())
     self.config = testing.setUp(request=testing.DummyRequest)   


def test_something(self):
    def test_func(request):
         return 1
    request = testing.DummyRequest()
    resp = validate_something(test_func(request))
    result = resp(request)

我得到的错误是(在最里面的 render_to_response 生成):

ValueError: no such renderer factory .jinja

我知道我需要模拟 render_to_response,但我不知道如何准确地做到这一点。如果有人有任何建议,我将不胜感激。

【问题讨论】:

    标签: python mocking pyramid python-unittest python-decorators


    【解决方案1】:

    以下内容对我有用:

    def setUp(self):
        self.app = TestApp(target_app())
        self.config = testing.setUp(request=testing.DummyRequest) 
        self.config.include('pyramid_jinja2')
    

    通过设置包含 jinja 的配置,您的测试可以找到您的模板和 jinja 环境。您可能还需要在与测试相同的文件夹中提供模板的测试版本。如果您在运行测试时收到诸如 TemplateNotFound 之类的消息,请确保模板的版本位于正确的位置。

    【讨论】:

      【解决方案2】:

      Mock 库很棒:

      mock 提供了一个核心 Mock 类,无需创建主机 整个测试套件的存根。执行操作后,您可以 断言使用了哪些方法/属性,以及 他们被调用的参数。您还可以指定返回值 并以正常方式设置所需的属性。

      另外,mock 提供了一个 patch() 装饰器来处理补丁 测试范围内的模块和类级别属性

      Youc 代码如下所示:

      def test_something(self):
          test_func = Mock.MagicMock(return_value=1)  # replaced stub function with a mock
          request = testing.DummyRequest()
          # patching a Pyramid method with a mock
          with mock.patch('pyramid.renderers.render_to_response' as r2r:
              resp = validate_something(test_func(request))
              result = resp(request)
              assert r2r.assert_called_with('template.jinja', 'error')
      

      【讨论】:

        猜你喜欢
        • 2015-06-23
        • 1970-01-01
        • 2017-04-09
        • 1970-01-01
        • 2018-02-23
        • 2014-08-22
        • 2013-06-26
        • 2021-09-05
        • 2018-08-06
        相关资源
        最近更新 更多