单元测试 Django 时区感知日期时间
Unit testing Django timezone aware datetime
我尝试比较 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})
然后我得到这个错误:
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}
比较 django 日期时间的正确方法是什么?
您可以将 Python datetime
对象转换为 ISO 时间字符串,或将 ISO 时间字符串解析为 python datetime
对象。
例如
...
'tag': 1, 'date': self.current_date_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')})
您可以使用to_representation(...)
方法作为DateTimeField
class
from django.test import TransactionTestCase
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):
<b>from rest_framework.fields import DateTimeField</b>
response = self.client.get("/api/notes/1/")
self.assertEqual(
response.json(),
{
"content": "test content",
"id": 1,
"tag": 1,
<b>"date": DateTimeField().to_representation(self.current_date_time)</b>,
},
)
我尝试比较 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})
然后我得到这个错误:
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}
比较 django 日期时间的正确方法是什么?
您可以将 Python datetime
对象转换为 ISO 时间字符串,或将 ISO 时间字符串解析为 python datetime
对象。
例如
...
'tag': 1, 'date': self.current_date_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')})
您可以使用to_representation(...)
方法作为DateTimeField
class
from django.test import TransactionTestCase
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):
<b>from rest_framework.fields import DateTimeField</b>
response = self.client.get("/api/notes/1/")
self.assertEqual(
response.json(),
{
"content": "test content",
"id": 1,
"tag": 1,
<b>"date": DateTimeField().to_representation(self.current_date_time)</b>,
},
)