如何通过试用测试扭曲的网络资源?

pie*_*zym 9 python twisted trial

我正在开发一个twisted.web服务器 - 它包含一些资源,除了渲染内容之外,还使用adbapi来获取一些数据并将一些数据写入postgresql数据库.我试图弄清楚如何编写一个试验单元测试来测试资源渲染而不使用网络(换句话说:它会初始化资源,产生虚拟请求等).

让我们假设View资源是一个简单的叶子,在render_GET中返回NOT_DONE_YET,并且使用adbapi修饰,以生成简单的文本.现在,我已经编写了这个无用的代码,我无法提出如何让它实际初始化资源并产生一些合理的响应:

from twisted.trial import unittest
from myserv.views import View
from twisted.web.test.test_web import DummyRequest

class ExistingView(unittest.TestCase):
    def test_rendering(self):
        slug = "hello_world"
        view = View(slug)
        request = DummyRequest([''])
        output = view.render_GET(request)
        self.assertEqual(request.responseCode, 200)
Run Code Online (Sandbox Code Playgroud)

输出是...... 1.我也尝试过这样的方法:output = request.render(view)但输出= 1.为什么?我会对一些gratefull 例如如何写这样的单元测试!

Jea*_*one 10

这是一个函数,它将呈现一个请求并将结果转换为在渲染完成时触发的Deferred:

def _render(resource, request):
    result = resource.render(request)
    if isinstance(result, str):
        request.write(result)
        request.finish()
        return succeed(None)
    elif result is server.NOT_DONE_YET:
        if request.finished:
            return succeed(None)
        else:
            return request.notifyFinish()
    else:
        raise ValueError("Unexpected return value: %r" % (result,))
Run Code Online (Sandbox Code Playgroud)

它实际上在Twisted Web的测试套件中使用,但它是私有的,因为它本身没有单元测试.;)

您可以使用它来编写如下测试:

def test_rendering(self):
    slug = "hello_world"
    view = View(slug)
    request = DummyRequest([''])
    d = _render(view, request)
    def rendered(ignored):
        self.assertEquals(request.responseCode, 200)
        self.assertEquals("".join(request.written), "...")
        ...
    d.addCallback(rendered)
    return d
Run Code Online (Sandbox Code Playgroud)