单元测试 Django 时区感知日期时间

pyp*_*ism 3 python django datetime django-unittest

我试图比较 DRF 响应和输入值。

class ViewTest(TransactionTestCase):
    reset_sequences = True
    current_date_time = timezone.now()

    def setUp(self):
        self.client = APIClient()
        self.user = User.objects.create_user('hiren', 'a@b.com', 'password')
        self.client.force_authenticate(user=self.user)
        self.tag = Tag.objects.create(name="Test tag")
        Notes.objects.create(tag=self.tag, content="test content", date=self.current_date_time)

    def test_return_correct_note(self):
        response = self.client.get('/api/notes/1/')
        self.assertEqual(response.json(), {'content': 'test content', 'id': 1,
                                           'tag': 1, 'date': self.current_date_time})
Run Code Online (Sandbox Code Playgroud)

然后我得到了这个错误:

AssertionError: {'date': '2016-04-09T07:35:28.039393Z', 'co[37 chars]': 1} != {'tag': 1, 'content': 'test content', 'id':[69 chars]TC>)}
  {'content': 'test content',
-  'date': '2016-04-09T07:35:28.039393Z',
+  'date': datetime.datetime(2016, 4, 9, 7, 35, 28, 39393, tzinfo=<UTC>),
   'id': 1,
   'tag': 1}
Run Code Online (Sandbox Code Playgroud)

比较 django datetime 的正确方法是什么?

C14*_*14L 6

您可以将 Pythondatetime对象转换为 ISO 时间字符串,也可以将ISO 时间字符串解析为 Pythondatetime对象。

例如

...
'tag': 1, 'date': self.current_date_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')})
Run Code Online (Sandbox Code Playgroud)