繁体   English   中英

pytest-django依赖注入

[英]Pytest-django dependency injection

pytest-django如何知道是否要使用RequestFactoryClient实例注入测试功能?

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的核心组成部分,并且为每个灯具乱用使用具有assert isinstance(my_fixture, MyFixtureType)灯具的每个测试都是多余的。

pytest-django已经在测试clientrf固定装置的类型是否正确:

def test_client(client):
    assert isinstance(client, Client)
...
def test_rf(rf):
    assert isinstance(rf, RequestFactory)

编辑:

将灯具作为参数传递给测试方法后,如果正确获得了灯具名称,则无需检查任何内容。

这是一个例子:

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM