Скажите Django tests.py использовать фиксатор вместо реальной базы данных - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно проверить свою базу данных без добавления или удаления элементов. Для этого я создал приспособление. Загрузка прибора, кажется, хорошо, по крайней мере, это не дает никаких ошибок. Теперь, как мне сказать, чтобы тестовые функции взаимодействовали с тестовой базой данных вместо реальной базы данных. Кроме того, как я могу распространить эту информацию на тестируемые функции?

Это мой текущий код:

"""Module to test upload app."""
import os
import wave
from django.test import TestCase, Client
from django.urls import reverse, resolve
from equestria.settings import BASE_DIR
from .views import UploadProjectView
from .models import File
from django.core.management import call_command
from scripts.models import Project
from django.core.files.uploadedfile import SimpleUploadedFile

class TestUpload(TestCase):
    """Test the upload app."""

    fixtures = ['equestria/upload/db.json']

    def setUp(self):
        self.project = Project.objects.all()[0]
        self.url = reverse('upload:upload_project', args=[self.project])
        self.client = Client()

    def test_upload_url_resolves(self):
        self.assertEquals( resolve( self.url ).func.view_class, UploadProjectView)

    def test_redirect_before_auth(self):
        response = self.client.get(self.url, follow = True)
        redir_url = response.redirect_chain[0][0]
        redir_code = response.redirect_chain[0][1]
        self.assertRedirects(response,'/accounts/login/?next=/upload/1',status_code=302, 
        target_status_code=200)
        self.assertEqual(redir_code, 302)
        self.assertEqual(redir_url, '/accounts/login/?next=/upload/1')

    def test_valid_file_ext_upload(self):

        self.client.login(username='test', password='secret')
        initial_files = len(File.objects.all())
        audio_file = wave.open(os.path.join(BASE_DIR, "upload/test_files/test.wav"), "rb")

        data = {
                'f':audio_file
            }

        response = self.client.post(self.url, data, format='multipart')
        current_files = len(File.objects.all())
        print(initial_files)
        print(current_files)
        self.assertEqual(initial_files + 1, current_files)
        self.assertEqual(response.status_code, 200)

Все тесты выполняются очень хорошо, кроме self.assertEqual(initial_files + 1, current_files). Текущая запись settings.py для базы данных в настоящее время

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
        'TEST': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': 'test.db',
        },
    }

}

Я добавил объект TEST, потому что он был рекомендован мне без объяснения того, что он делает.

Как мне сообщить тестовый класс для использования БД, созданной с помощью прибора? Что делает объект TEST в настройках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...