Тестовата база данни на Django не се промива автоматично

Имам куп файлове с модулен тест, всички от които се състоят от класове django.test.TestCase.

Написах си малък шел скрипт за разкоментиране/коментиране на импортиране на тестови файлове в моя __init__.py файл, така че да мога да изпълнявам тестове от определени тестови файлове въз основа на аргументите на командния ред, които му давам. Също така мога да стартирам всички тестове на всички тестови файлове наведнъж (за целите на регресионното тестване).

Имам този един тестов файл, който има някои JSON приспособления и първият тест проверява дали даден модел/таблица има 3 записа в него (дефинирани от JSON приспособлението).

И така, ето го проблемът: когато стартирам този тестов файл сам, неговите тестове преминават с отличие, но когато стартирам теста с всички други тестове, конкретният тестов случай, който споменах, се проваля.

Когато стартирам всички тестове, базата данни казва, че има 6 записа в таблицата/модела, но трябва да има само 3 (от приспособлението), както когато тестовият файл се изпълнява сам.

Опитах също така да стартирам този тестов файл с няколко други тестови файла (не всички) и той минава. Така че единственият път, когато не става, е когато всички тестови файлове се изпълняват.

За мен това изглежда като бъг в Django или PostgreSQL (DB, който използвам), защото Django TestCases не трябва ли автоматично да промива/нулира базата данни между всеки тестов метод, да не говорим за тестов клас?


person pleasedesktop    schedule 27.02.2013    source източник
comment
Малко вероятно е това да е грешка в PostgreSQL, така че бих предложил да се свържете с екипа на Django. От описанието ви звучи, че връщане назад, което очаквате да се случи, не се извършва.   -  person Chris Travers    schedule 01.05.2013


Отговори (1)


Това вероятно се дължи на разликата в начина, по който се извършва почистването между TestCase и TransactionTestCase в Django. Преди Django 1.5 TransactionTestCases трябваше да се изпълнява след TestCases (и Djangos testunner направи това вместо вас). Това обаче трябва да бъде коригирано във 1.5, така че опитайте да изпълните тестовете си отново там...

person Emil Stenström    schedule 03.07.2013