Django.db.utils.ProgrammingError: (1146, "Таблица 'test_conect.projects' не существует") во время тестирования
Я пытаюсь впервые протестировать модели в моем приложении django, но когда я запускаю
python manage.py test
я получаю следующую ошибку
django.db.utils.ProgrammingError: (1146, "Table 'test_conect.projects' doesn't exist")
Вот модель, которую я хочу протестировать
class Files(models.Model):
file_id = models.IntegerField(db_column='File_iD', primary_key=True) # Field name made lowercase.
file_name = models.CharField(db_column='File_Name', max_length=45) # Field name made lowercase.
file_size_gb = models.FloatField(db_column='File_Size_Gb') # Field name made lowercase.
md5 = models.CharField(db_column='MD5', max_length=40) # Field name made lowercase.
sample = models.ForeignKey('Samples', models.DO_NOTHING, db_column='Sample_id') # Field name made lowercase.
url = models.CharField(db_column='Url', max_length=200) # Field name made lowercase.
class Meta:
managed = False
db_table = 'files'
verbose_name_plural = "files"
def sample_value(self):
return self.sample.sample_id if self.sample else None
sample_value.short_description = 'Samples'
и вот код, который я запускаю для теста
from django.test import TestCase
from conect.models import Files, Samples, Patients, Projects
class FilesModelTests(TestCase):
def setUp(self):
# Create a project instance
# Correct way to create an instance of the Projects model
project_instance = Projects.objects.create(project_id=10, project_name='test Project Name', project_description='test Project Description')
# Create a patient instance
patient_instance = Patients.objects.create(patient_id='Patient123')
# Create a sample instance
sample_instance = Samples.objects.create(sample_id='Sample123', patient=patient_instance)
# Create a test instance of the Files model
Files.objects.create(
file_id=1,
file_name='Test File',
file_size_gb=2.5,
md5='abc123',
sample=sample_instance,
url='https://example.com/testfile'
)
def test_sample_value_method(self):
# Retrieve the test instance from the database
test_file = Files.objects.get(file_id=1)
# Test the sample_value method
self.assertEqual(test_file.sample_value(), 'Patient123') # Adjust to the actual field you want to display
def test_model_fields(self):
# Retrieve the test instance from the database
test_file = Files.objects.get(file_id=1)
# Test that the model fields have the expected values
self.assertEqual(test_file.file_name, 'Test File')
self.assertEqual(test_file.file_size_gb, 2.5)
self.assertEqual(test_file.md5, 'abc123')
self.assertEqual(test_file.sample.sample_id, 'Sample123')
self.assertEqual(test_file.url, 'https://example.com/testfile')
def test_verbose_name_plural(self):
# Test the verbose name plural of the model
self.assertEqual(Files._meta.verbose_name_plural, "files")
Даже после выполнения
python manage.py makemigrations
затем migrate
команды тестовая база данных содержит только таблицы, автоматически созданные django при миграции (auth_group, auth_group_permissions, etc) Надеюсь, вы поняли суть.
И еще одно, мои настройки для части баз данных таковы :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'conect',
'USER': env.str('conectuser'),
'PASSWORD': env.str('mysql_password'),
'HOST': 'localhost',
'PORT': '',
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET collation_connection = utf8mb4_unicode_ci",
},
'test': {
'ENGINE': 'django.db.backends.mysql', # Use the MySQL engine for testing
'NAME': 'test_conect', # Specify the test database name
'USER': 'testuser', # Use the same user as the production database
'PASSWORD': 'your_test_db_password',
'HOST': 'localhost',
'PORT': '3306', # MySQL default port
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET collation_connection = utf8mb4_unicode_ci",
},
},
}
}
Я попробовал несколько решений, которые я нашел в Интернете, которые не ответ на мою ошибку, я надеюсь, что у кого-то здесь есть ответ. Для контекста, я пишу эти тесты, чтобы попробовать действия github для моего приложения, и я не решаюсь использовать docker для mysql и django, потому что это займет время, чтобы изучить docker и docker compose и все вещи, которые приходят с интеграцией позже.