[英]Pytest-django dependency injection
pytest-django如何知道是否要使用RequestFactory
或Client
实例注入测试功能?
def test_with_client(client):
response = client.get('/')
assert response.content == 'Foobar'
def test_details(rf):
request = rf.get('/customer/details')
response = my_view(request)
assert response.status_code == 200
换句话说:如何确定输入夹具是某种类型?
pytest不是根据类型而是根据名称进行注入。 输入参数的名称与注册的灯具匹配。
请参阅此处的文档,但总而言之
import pytest
@pytest.fixture
def connection():
return Connection()
def test_my_object(connection):
target = MyObject(connection)
assert ...
您可以使用类型注释来帮助PyCharm等推断正确的类型,但是pytest不会使用这些注释。
编辑:
将灯具作为参数传递给测试方法后,如果正确获得了灯具名称,则无需检查任何内容。
这是一个例子:
@pytest.fixture(scope='session')
def factory():
return RequestFactory(HTTP_X_REQUESTED_WITH='XMLHttpRequest')
@pytest.fixture(scope='session')
def client():
return Client(HTTP_X_REQUESTED_WITH='XMLHttpRequest')
现在,在您的测试方法中,您可以使用其中一个或两个夹具并使用它们,例如:
def test_foo(client):
# Do stuff
def test_bar(factory):
# Do stuff
原始答案:
您可以使用isinstance
输入灯具的类型。
from django.test import RequestFactory, Client
在Client
的测试方法测试中:
if isinstance(client, Client):
# This is a Client instance
同样对于RequestFactory
:
if instance(rf, RequestFactory):
# This is a RequestFactory instance
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.