我正在測驗游戲的 api,但模型存在一些問題。
這是我的模型:
模型.py
class Gamesession(models.Model):
gamemode = models.ForeignKey(Gamemode, on_delete=models.CASCADE, null=True)
user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True)
gametype = models.ForeignKey(Gametype, on_delete=models.CASCADE)
created = models.DateTimeField(editable=False)
objects = models.Manager()
這是測驗套件:
test_models.py
def setUp(self):
self.user = CustomUser.objects.create(id=1, username="carina")
self.gametype = Gametype.objects.create(id=1, name="NewGame", rounds=5, round_duration=60, enabled=True)
self.gamesession_user = self.user
self.gamesession_gametype = self.gametype
self.gamesession_created = datetime.utcnow().replace(tzinfo=pytz.UTC)
self.gamesession = Gamesession.objects.create(id=1,
user=self.gamesession_user,
gametype=self.gamesession_gametype,
created=self.gamesession_created)
def test_create_gamesession(self):
gamesession = Gamesession.objects.create(gametype=self.gametype)
assert gamesession.gametype == self.gamesession_gametype
運行我的測驗不斷檢索錯誤:GamesessionTests::test_create_gamesession - django.db.utils.IntegrityError:關系“frontend_games”的“created”列中的空值
我該如何解決這個問題?是否有更好的方法來測驗是否創建了模型的實體?
uj5u.com熱心網友回復:
發生這種情況是因為您將其定義created為 notnull=True且沒有 any的欄位default=…,因此這意味著它沒有為其分配適當的值。因此,您可以使用以下方法構造物件:
def test_create_gamesession(self):
gamesession = Gamesession.objects.create(
gametype=self.gametype,
gamesession_created=self.gamesession_created
)
assert gamesession.gametype == self.gamesession_gametype
你可能不想指定一個值,你可以使用auto_now_add=True[Django-doc]來指定 Django 在創建物件時應該填寫時間戳:
class Gamesession(models.Model):
# …
created = models.DateTimeField(auto_now_add=True)
這也將使該欄位不可編輯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427898.html
標籤:django 单元测试 django-rest-framework
上一篇:Cmocka-我們是否應該為每個測驗創建一個可執行檔案來隔離靜態變數?
下一篇:阻止特定目錄上的爬蟲
