Sie können die Eigenschaft der Anforderung mit der Direktive add_request_method der Pyramide hinzufügen. (In der Vergangenheit gab es eine Direktive namens add_request_property, die jedoch in Eile veraltet war.)
document: http://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html#pyramid.config.Configurator.add_request_method
Es gibt zwei Möglichkeiten, die Sie berücksichtigen sollten:
--reify - Fügen Sie der Anforderung ein Attribut hinzu. Die hinzugefügten Attribute werden zwischengespeichert --property - Fügt der Anforderung ein Attribut hinzu. Das hinzugefügte Attribut wird jedes Mal berechnet
Wenn nichts angehängt ist, wird es als Methode hinzugefügt. (Wenn verify = True ist, wird es automatisch als Eigenschaft hinzugefügt.)
## configuration
def includeme(config):
## request.get_foo()Kann als bezeichnet werden
config.add_request_method(get_foo, "get_foo")
## request.Kann als foo zugegriffen werden
config.add_request_method(get_foo2, "foo", reify=True)
config.add_request_method(get_foo2, "foo", property=True)
Prüfung. Wenn es sich um einen Komponententest handelt, können Sie Mock für Text verwenden. Irgendwie kann es mit Dummy gemacht werden. Eine Geschichte darüber, was während des Integrationstests zu tun ist.
Schauen wir uns den Code der Pyramide an. Die Antwort ist in pyramid / router.py. Grob gesagt können wir Folgendes sehen.
--add_request_method speichert eine Schnittstelle namens IRequestExtensions im Schlüssel
Ein Beispiel für das Schreiben eines Integrationstests unter Bezugnahme auf das oben Gesagte Setzen Sie diesmal request.foo. Überprüfen Sie einfach, ob Sie es mit request.foo erhalten können.
# -*- coding:utf-8 -*-
import unittest
## definition
foo = object()
def get_foo(request):
return foo
def includeme(config):
config.add_request_method(get_foo, "foo", reify=True)
## test
class Tests(unittest.TestCase):
def _makeOne(self, config, path="/"):
from pyramid.request import Request
from pyramid.interfaces import IRequestExtensions
request = Request.blank(path)
extensions = config.registry.getUtility(IRequestExtensions)
request.registry = config.registry
request._set_extensions(extensions)
return request
def test_it(self):
from pyramid.testing import testConfig
with testConfig() as config:
config.include(includeme)
### request time
request = self._makeOne(config, path="/")
self.assertEqual(request.foo, foo)
Recommended Posts