TIL#90 Unit test created_at


今回の2番目のプロジェクトでunit testを学び、appごとにtestがあります.Pyと書きました.プロジェクトが進むにつれて、個人プロジェクトDanoshopClone、InstarmCloneもUnit Testに加入し、InstagramクローンコードプロジェクトでUnit Testを作成する際にどうすればいいか分からないという問題に直面している.
通常、ユニットテストはdef setUp(self):によって仮想データを作成し、テストコードを迂回して結果を確認します.この場合、結果値はビューを回転したときに発生した値と同じでもよいです.
例を挙げる.
# view.py 에 작성한 결과
result = [{
    'id':data.id,
    'name':data.name,
    'price':data.price,
} for data in datas]
return JsonResponse({'data_list':result}, status=200)

# unit test 결과작성
self.assertEqual(response.json(), 
    {
        'data_list':
            [{
                'id':1,
                'name':'pencil',
                'price':2000
            }
            {
                'id':3,
                'name':'pen',
                'price':2500
            }]
    }
)
このようにして仮想データをsetUp()に書き込み、その結果値を予測し、ビューに従って入力して実行すればよい.
問題はcreated_atです.ビューの結果値にはcreated_atがあり、これはインスタンスの作成時の時間であるため、実行は予想できません.結論は問題を解決して、1つの招待状GETのビューを書いて、招待状の上で時間が必要で、だから結果の値はcreated_atしかありません.出力がDateTimeFieldの場合、結果値はdatetime(datetime.... の形で現れる.それを私たちが望むフォーマットに変換するには、strftimeの方法が必要です.
unit testではsetUpで作成したデータを変数に割り当て、結果値はビューのデータと同じです.created_at.ユニットテストはstrftime形式で作成され、完了しました.
# views.py

results = [{
            'id'        : data.id,
            'content'   : data.content,
            'image'     : [data.image for data in Image.objects.filter(posting=data)],
            'created_at': data.created_at.strftime('%Y-%m-%d %H:%M:%S')
        } for data in posting]
        
# unit test

self.assertEqual(response.json(), 
            {'posting_list':[{
                'id'         : 11,
                'content'    : 'hihi',
                'image'      : ['cat.cat','cat1.cat'],
                'created_at' : posting.created_at.strftime('%Y-%m-%d %H:%M:%S')
            }]}
        )