Джанго модели кешируют? Как отключить в тестах - PullRequest
3 голосов
/ 12 февраля 2010

Сначала код моего tests.py

def test_get_current(self):
    m = Member.objects.create(...)
    q = Question.objects.create(name="q1", text="q1", start_datetime=self.day_before, close_datetime=self.day_after, type=self.type)
    r = Response.objects.create(question=q, text='response')
    expected = q, None 
    #self.assertEquals(expected, Question.objects.get_current(m.id))

    q2 = Question.objects.create(name="q2", text="q2", start_datetime=self.day_before, close_datetime=self.day_after, type=self.type)
    #print Question.objects.all()
    #self.assertEquals(expected, Question.objects.get_current(m.id))
    MemberResponse.objects.create(member=m, response=r)
    print Question.objects.all().exclude(response__memberresponse__member=m)
    print Question.objects.all().exclude(response__memberresponse__member=m)

Я получил неожиданные результаты в своей функции get_current, поэтому я прокомментировал ее и попытался отладить, напечатав основной набор запросов, используемый внутри функции, и получил также странные результаты:

...
Installing index for ... model
[<Question: q1>, <Question: q2>]
[<Question: q2>]
.....
----------------------------------------------------------------------
Ran 5 tests in 3.125s

Мне интересно, почему QuerySet с теми же аргументами возвращает сначала неверные данные, но при следующем вызове - исправить и как мне этого избежать?

Кстати, есть ли в мире django что-то похожее на девушку из Rails по созданию тестовых данных?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

factory_boy - это "замена приспособлений, основанная на factory_girl мыслей"

Если вы пришли из Rails, вы обнаружите, что он работает очень похоже на factory_girl. Рекомендуется.

1 голос
/ 12 февраля 2010

Есть ли в мире django что-то похожее на заводскую девушку из Rail для создания тестовых данных?

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

Из документации вы можете указать, какие приборы загружать.

class AnimalTestCase(TestCase):
    fixtures = ['mammals.json', 'birds']

    def setUp(self):
    # Test definitions as before.
    call_setup_methods()

    def testFluffyAnimals(self):
    # A test that uses the fixtures.
    call_some_test_code()

И, о-о, вы можете создавать приборы, используя python manage.py dumpdata

А что касается отключения кэша во время разработки, не затрагивая код, вы должны использовать «Dummy Caching» в качестве резервной копии кэша.

Из документации вы можете попросить django использовать этот бэкэнд с помощью следующей переменной настроек:

CACHE_BACKEND = 'dummy://'

Обычно это помещается в localsettings.py вашей системы разработки.

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