2015-01-21 2 views
2

Я написал несколько пользовательских запросов на выбор 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. Другими словами: могу ли я что-то сделать, чтобы этот тестовый пример работал?

Благодаря

ответ

2

Вы выбираете из highlights_flag таблицы, но эта модель называется Feature. Возможно, вы должны поменять ваш запрос на:

SELECT count(*) FROM highlights_feature 
+0

глупый я, тест проходит сейчас ;-( – linqu

Смежные вопросы