diff --git a/pytest_django/compat.py b/pytest_django/compat.py index 422d0e723..c427beaf1 100644 --- a/pytest_django/compat.py +++ b/pytest_django/compat.py @@ -1,3 +1,5 @@ +# This file cannot be imported from until Django sets up + try: # Django 1.11 from django.test.utils import setup_databases, teardown_databases # noqa diff --git a/pytest_django/fixtures.py b/pytest_django/fixtures.py index 97caa84dd..c8836a14f 100644 --- a/pytest_django/fixtures.py +++ b/pytest_django/fixtures.py @@ -9,6 +9,7 @@ from . import live_server_helper from .django_compat import is_django_unittest +from .pytest_compat import getfixturevalue from .lazy_django import get_django_version, skip_if_no_django @@ -154,7 +155,7 @@ def db(request, django_db_setup, django_db_blocker): """ if 'transactional_db' in request.funcargnames \ or 'live_server' in request.funcargnames: - request.getfuncargvalue('transactional_db') + getfixturevalue(request, 'transactional_db') else: _django_db_fixture_helper(False, request, django_db_blocker) @@ -322,4 +323,4 @@ def _live_server_helper(request): function-scoped. """ if 'live_server' in request.funcargnames: - request.getfuncargvalue('transactional_db') + getfixturevalue(request, 'transactional_db') diff --git a/pytest_django/plugin.py b/pytest_django/plugin.py index 2e9941b03..428be867f 100644 --- a/pytest_django/plugin.py +++ b/pytest_django/plugin.py @@ -31,6 +31,7 @@ from .fixtures import rf # noqa from .fixtures import settings # noqa from .fixtures import transactional_db # noqa +from .pytest_compat import getfixturevalue from .lazy_django import (django_settings_is_configured, get_django_version, skip_if_no_django) @@ -370,17 +371,17 @@ def _django_db_marker(request): if marker: validate_django_db(marker) if marker.transaction: - request.getfuncargvalue('transactional_db') + getfixturevalue(request, 'transactional_db') else: - request.getfuncargvalue('db') + getfixturevalue(request, 'db') @pytest.fixture(autouse=True, scope='class') def _django_setup_unittest(request, django_db_blocker): """Setup a django unittest, internal to pytest-django.""" if django_settings_is_configured() and is_django_unittest(request): - request.getfuncargvalue('django_test_environment') - request.getfuncargvalue('django_db_setup') + getfixturevalue(request, 'django_test_environment') + getfixturevalue(request, 'django_db_setup') django_db_blocker.unblock() diff --git a/pytest_django/pytest_compat.py b/pytest_django/pytest_compat.py new file mode 100644 index 000000000..8bbbe7ddd --- /dev/null +++ b/pytest_django/pytest_compat.py @@ -0,0 +1,5 @@ +def getfixturevalue(request, value): + if hasattr(request, 'getfixturevalue'): + return request.getfixturevalue(value) + + return request.getfuncargvalue(value) diff --git a/tests/test_database.py b/tests/test_database.py index 90ad58113..713a265dd 100644 --- a/tests/test_database.py +++ b/tests/test_database.py @@ -4,6 +4,7 @@ from django.db import connection from django.test.testcases import connections_support_transactions +from pytest_django.pytest_compat import getfixturevalue from pytest_django_test.app.models import Item @@ -33,9 +34,9 @@ class TestDatabaseFixtures: @pytest.fixture(params=['db', 'transactional_db']) def both_dbs(self, request): if request.param == 'transactional_db': - return request.getfuncargvalue('transactional_db') + return getfixturevalue(request, 'transactional_db') elif request.param == 'db': - return request.getfuncargvalue('db') + return getfixturevalue(request, 'db') def test_access(self, both_dbs): Item.objects.create(name='spam')