Ошибка DRF Cannot assign must be instance при тестировании
Я очень новичок в Django и особенно в тестировании.
Я пытаюсь протестировать представление, которое получает объект ресурса и создает игровой раунд и объект gamesession (в запросе get).
Вот как выглядят мои тесты: test_views.py
class GameViewTests(APITestCase):
def setUp(self):
self.client = APIClient()
self.resource = {'hash_id': '1404cc769fa538fab1b65b9cad201eca'}
self.user = CustomUser.objects.create(username="carina")
self.gametype = Gametype.objects.create(name="labeler", rounds=5, round_duration=60, enabled=True),
self.gamesession = Gamesession.objects.create(user=self.user, gametype=self.gametype, created=datetime.now())
self.gameround = Gameround.objects.create(user=self.user, gamesession=self.gamesession,
created=datetime.now(), score=0)
self.game_data = {'gametype': self.gametype,
'gamesession': self.gamesession,
'gameround': self.gameround,
'resource': self.resource}
self.response = self.client.get('http://localhost:8000/api/game/',
self.game_data,
format="json")
def test_get(self):
self.client = APIClient()
response = self.client.get('http://localhost:8000/api/game/')
self.assertEqual(response.status_code, 200)
Когда я запускаю свой тест, я получаю ошибку ValueError: Cannot assign "(<Gametype: imageLabeler>,)": "Gamesession.gametype" должен быть экземпляром "Gametype".
Как сделать так, чтобы тест прошел?
raise self.model.DoesNotExist(
frontend.models.Gametype.DoesNotExist: Gametype matching query does not exist.
У вас нет Gametype объекта с name imageLabeler в базе данных.
вы должны поймать DoesNotExist ошибку, чтобы избежать сбоя программы:
try:
gt = Gametype.objects.get(name="imageLabeler")
except Gametype.DoesNotExist:
print('Boom boom! here is no imageLabeler in DB')
return Response(status=status.HTTP_404_NOT_FOUND)
Другая проблема заключается в том, что вы создаете объект с именем labeler:
self.gametype = Gametype.objects.create(name="labeler", rounds=5, round_duration=60, enabled=True)
Но пытаюсь получить imageLabeler:
gametype = Gametype.objects.all().get(name="imageLabeler")