1

I'm trying to unit test a model but I keep getting "Donation matching query does not exist," with the traceback pointing to the first line in the test_charity function. I tried getting the object with charity='aclu' instead of by ID, but that did not fix it.

from django.test import TestCase
from .models import Donation


class DonateModelTest(TestCase):

    def init_data(self):
        #print("got here")
        x = Donation.objects.create(charity='aclu', money_given=15)
        # print(x.id)

    def test_charity(self):
        donation = Donation.objects.get(id=1)
        field_label = donation._meta.get_field('charity').verbose_name
        self.assertEquals(field_label, 'charity')

My models.py:

from django.db import models

class Donation(models.Model):
    DONATE_CHOICES = [
        ('aclu', 'American Civil Liberties Union'),
        ('blm', 'Black Lives Matter'),
        ('msf', 'Medecins Sans Frontieres (Doctors Without Borders)')
    ]

    charity = models.CharField(
        max_length=4,
        choices=DONATE_CHOICES,
        default='aclu'
    )

    money_given = models.IntegerField(default=0)
Ghengis Sean
  • 65
  • 1
  • 6

1 Answers1

1

You setUp data with setUp. Furthermore you should save the primary key, and use this since a database can use any primary key. Depending on the database backend, and the order of the test cases, it thus can create an object with a different primary key:

class DonateModelTest(TestCase):

    def setUp(self):
        self.pk = Donation.objects.create(charity='aclu', money_given=15).pk

    def test_charity(self):
        donation = Donation.objects.get(id=self.pk)
        field_label = donation._meta.get_field('charity').verbose_name
        self.assertEquals(field_label, 'charity')
Willem Van Onsem
  • 443,496
  • 30
  • 428
  • 555