Я написал несколько пользовательских запросов на выбор SQL в своем коде - мы используем postgresql. Оказалось, что моя область unittests не работает, потому что тестовая база данных не содержит фактических данных. Чтобы проиллюстрировать этот факт, я написал этот маленький тестовый пример:Необработанные sql-запросы в django unittests
from django.db import connection
from django.test import TestCase
from highlights.models import Feature
class TestRaw(TestCase):
def setUp(self):
Feature(username="me", feature=True).save()
def test_raw(self):
# this check passes
self.assertEqual(1, Feature.objects.all().count())
# raw queries do not, 1 != 0
with connection.cursor() as c:
c.execute("SELECT count(*) FROM highlights_flag")
r = c.fetchone()
self.assertEqual(1, r[0])
Необработанный SQL-запрос не видит объект Feature, который был сохранен в setUp
методе класса TestCase. Я также подтвердил с psql
, что тестовая база данных пуста.
Я предполагаю, что тестовая структура django создает новую транзакцию db для каждого тестового примера и откатывает ее, когда она закончена, - только гадание.
У вас есть идея, как я могу сделать свой пользовательский код sql testable. Другими словами: могу ли я что-то сделать, чтобы этот тестовый пример работал?
Благодаря
глупый я, тест проходит сейчас ;-( – linqu