Как вы тестируете модуль Django RawQuerySets - PullRequest
0 голосов
/ 29 апреля 2018

Я использую raw() и annotate() для запроса Django, и мне нужно как-то проверить его.

Вот как выглядит мой код (это значительно упрощается)

query = """SELECT
           table1.id, table1.column1, table1.column2,
           table2.other_column1, table2.other_column2 
           FROM myapp_mymodel as table1 
           JOIN otherapp_othermodel as table2 ON table1.othermodel_id = table2.id"""

return MyModel.objects.annotate(
    other_column1=models.Value('other_column1', models.IntegerField()),
    other_column2=models.Value('other_column2', models.DateField())
).raw(query)

Заполнить базу данных примерами данных довольно просто, но как лучше всего проверить, что данные возвращаются этим кодом?

Существует множество опций при работе со стандартными наборами запросов, которые, похоже, выходят за рамки при работе с RawQuerySets.

1 Ответ

0 голосов
/ 29 апреля 2018

Обычно подход состоит в том, чтобы тест настраивал относительно небольшой набор данных, который содержит некоторые вещи, которые должен найти запрос, и некоторые вещи, которые он не должен найти. Затем осмотрите возвращенное QuerySet и убедитесь:

  1. что содержит ожидаемое количество результатов
  2. Что набор значений первичного ключа соответствует ожидаемому результату
  3. что аннотированные значения в возвращаемых объектах соответствуют ожидаемым.

Так, например, вы можете сделать что-то вроде:

def test_custom_query(self):
    # Put whatever code you need here to insert the test data
    results = run_your_query_here()
    self.assertEqual(results.count(), expected_number_of_results)
    self.assertEqual({obj.pk for obj in results}, set_of_expected_primary_keys)
    self.assertEqual(
        [obj.annotated_value for obj in results],
        list_of_expected_annotated_values
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...