Джанго Нос не создает модели только для испытаний во время тестовых прогонов
У меня установлен django-nose 1.0 в качестве тестового прогона для проекта Django 1.3.1. Я следую инструкциям на странице pypi относительно моделей только для тестирования.
Вот мой config.py testrunner config:
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Я провел тесты в течение нескольких месяцев, используя этот тестраннер без проблем. Сейчас я пытаюсь протестировать абстрактный класс и использую модель только для тестирования, но конкретный тест, который я написал, выдает ошибку.
Согласно документации, мне нужно только включить тестовый класс в один из файлов, который импортируется во время тестирования. У меня есть тесты, которые находятся в папке "тесты" и разбиты на несколько небольших файлов тестирования. Вот мои тесты /model_tests.py (модели и приложения специально переименованы по соображениям работы):
from django.tests import TestCase
from myapp.models import AbstractFoo
class Foo(AbstractFoo):
pass
class TestFoo(TestCase):
def setUp(self):
self.foo = Foo.objects.create(name="Tester",
description="This is a test", ...)
... [tests follow]
Я получаю сообщение об ошибке в первой строке setUp:
DatabaseError: relation "tests_foo" does not exist
LINE 1: INSERT INTO "tests_foo" ("name", "description", "display...
И если я поставлю точку останова в тесте и проверим базу данных, таблица 'tests_foo' (или любая таблица с 'foo' в имени) не существует.
Есть идеи о том, почему не загружается тестовая модель?
2 ответа
Да, кажется, что это все еще проблема. Видел это с Джанго ==1.6 и Джанго-Нос ==1.3
Один из обходных путей - поместить все модели в __init__.py
в вашем tests/
папка
Актуальная проблема на GitHub: django-nose / Issues / 77
Вам нужно создать модель в тестовой базе данных, для этого вам нужно сгенерировать миграцию или создать таблицу в базе данных вручную. Вы можете проверить мою реализацию второго варианта https://github.com/erm0l0v/django-fake-model
Этот код должен работать так, как вы ожидаете:
from django.tests import TestCase
from myapp.models import AbstractFoo
from django_fake_model import models as f
class Foo(f.FakeModel, AbstractFoo):
pass
@Foo.fake_me
class TestFoo(TestCase):
def setUp(self):
self.foo = Foo.objects.create(name="Tester",
description="This is a test", ...)
... [tests follow]