pytest是如何知道是用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换句话说:如何确保输入夹具是某种类型的?
发布于 2019-07-19 09:16:18
pytest不是根据类型而是根据名称注入的。输入参数的名称与注册的固定装置相匹配。
请参阅docs 这里,但简而言之
import pytest
@pytest.fixture
def connection():
return Connection()
def test_my_object(connection):
target = MyObject(connection)
assert ...您可以使用类型注释来帮助PyCharm等推断正确的类型,但是pytest没有使用这些类型。
发布于 2019-07-19 09:18:23
发布于 2019-07-19 09:08:04
编辑:
由于您已将该夹具作为测试方法的param传递,如果您正确地获得了该夹具名称,则无需检查任何内容。
下面是一个例子:
@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 instancehttps://stackoverflow.com/questions/57108949
复制相似问题