pytest-django не разрешит доступ к базе данных даже с пометкой - PullRequest
0 голосов
/ 31 мая 2019

Мне трудно понять, что не так с моей настройкой.Я пытаюсь проверить вид входа в систему, и независимо от того, что я пытаюсь, я получаю:

Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.

Мой тест:

import pytest

from ..models import User


@pytest.mark.django_db
def test_login(client):
    # If an anonymous user accesses the login page:
    response = client.get('/users/login/')
    # Then the server should respond with a successful status code:
    assert response.status_code == 200

    # Given an existing user:
    user = User.objects.get(username='user')
    # If we attempt to log into the login page:
    response = client.post('/users/login/', {'username': user.username, 'password': 'somepass'})
    # Then the server should redirect the user to the default redirect location:
    assert response.status_code == 302

Мой конкурсФайл .py, в том же каталоге тестов:

import pytest

from django.core.management import call_command


@pytest.fixture(autouse=True)
def django_db_setup(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        call_command('loaddata', 'test_users.json')

Мой файл pytest.ini (в котором указан правильный файл настроек Django):

[pytest]
DJANGO_SETTINGS_MODULE = config.settings

Я в тупике.Я попытался использовать scope="session" как в документации вместе с меткой @pytest.mark.django_db, приспособлением db (в качестве параметра для тестовой функции) или с обоими безуспешно.Я прокомментировал каждую строку теста, чтобы выяснить, какая из них вызвала проблему, но не смог ее выяснить.Я смог запустить тест только в том случае, если я удалил из теста все db-зависимые фикстуры / метки / код и имел простой assert True.Я не верю, что проблема в моих настройках Django, так как сервер разработки работает нормально и может получить доступ к базе данных.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 04 июня 2019

По-видимому, это случай "синдрома обманывающего исключения". У меня была миграция, которая создала группы с разрешениями, и поскольку тесты запускают все миграции одновременно, сигнал после миграции, который создает разрешения, от которых зависит миграция, никогда не запускался до перехода к этой миграции.

Похоже, что при возникновении какой-либо ошибки, связанной с базой данных, до запуска реальных тестов возникает это исключение, что очень затрудняет отладку именно того, что происходит не так. Я закончил тем, что обновил свой скрипт миграции, чтобы вручную создать разрешения для запуска миграции, и ошибка исчезла.

...