Django — модульный тест с отметкой времени

Мое приложение предоставляет статус в зависимости от даты и времени суток, которые предоставляются в качестве входных данных для пользовательского URL-адреса. Обычно он будет использовать текущее время (datetime.now()), но я хотел бы создать модульные тесты для проверки времени в будущем. Однако у меня возникли проблемы с использованием метки времени в качестве переменной для тестирования. Идеи? Вот код на данный момент:

URL.py:

urlpatterns = patterns('',
   (r'^/(\w+)/status/$', 'app.views.fetch_status'),
   # Normally:
   #(r'^/(\w+)/status/$', 'app.views.fetch_status', {'timestamp': datetime.now() }),
   ...

просмотров.py:

def fetch_status(request, slug, timestamp):
    ...

тесты.py:

class TimeTests(TestCase):
    fixtures = ['hours.json']

    def testSchedule(self):
        timestamp = datetime(2012, 6, 19, 5, 0)
        client = Client()
        response = client.get('/service/status/', {'timestamp': timestamp})
        self.assertEqual(response.context['status'], 'closed')

Результат:

TypeError: fetch_status() takes exactly 2 arguments (1 given)

person Community    schedule 25.06.2012    source источник


Ответы (1)


Почему вы изменили шаблон, чтобы не включать параметр метки времени? Судя по всему и исходя из вашей ошибки, функция ожидает еще один аргумент, который вы на самом деле не предоставляете, потому что изменили шаблон.

person Jordan    schedule 25.06.2012
comment
Я хотел бы переопределить метку времени в своем модульном тесте. Если я оставлю эту строку без комментариев, вместо переопределения будет использоваться datetime.now(). - person ; 26.06.2012
comment
почему бы не создать пустой объект datetime, который вы затем можете передать? или измените функцию fetch_status, чтобы она принимала меньше аргументов и просто обрабатывала тестовую дату и время как часть полезной нагрузки. - person Jordan; 26.06.2012
comment
Я создал необязательный параметр, который принимает отметку времени unix через URL-адрес. Спасибо! - person ; 26.06.2012