Testowanie widoku

0

Witam,

piszę swoją pierwszą aplikację w django i mam problem z napisaniem testu do jednego z widoków.

Oto on:

class IngredientAddView(PermissionRequiredMixin, CreateView):
  permission_required = 'diet_app.add_ingredient'
  model = Ingredient
  fields = '__all__'
  success_url = '/ingredients_list'

urls:
:

path('add_ingredient/', IngredientAddView.as_view(), name='add-ingredient')

Sam test jaki napisałem wygląda następująco:

@pytest.mark.django_db
def test_add_ingredient2(client):
    client.post('/add_ingredient/', {
        'name': 'groszek',
        'nutrient': '1',
        'glycemic_index': '1'
    })
    assert Ingredient.objects.get(
        name='groszek',
        nutrient=1,
        glycemic_index=1
    )

Model:

class Ingredient(models.Model):
  name = models.CharField(max_length=50, unique=True)
  nutrient = models.IntegerField(choices=NUTRIENTS)
  glycemic_index = models.IntegerField(choices=GLYCEMIC_INDEX)

Wzoruje się na przykładach jakie do tej pory miałem na zajęciach, ale test ewidentnie nie działa. Błąd jaki otrzymuje to:

FAILED diet_app/tests.py::test_add_ingredient2 - diet_app.models.Ingredient.DoesNotExist: Ingredient matching query does not exist.

Będę wdzięczny za podpowiedź co robię źle.

1

Test działa, i to bardzo dobrze. Test, z tego co rozumiem, ma testować czy jak strzelisz POST pod Twój url, to czy zostanie stworzony nowy ingredient.

Jasno widać, że nie jest tworzony, czyli test failuje tak jak ma failować. To bardzo dobry test.

0

Dziękuję bardzo za opdowiedź (i przepraszam za źle wklejony kod w poście).

0

Nie nadajesz uprawnień a korzystasz z PermissionRequiredMixin
Dodatkowo warto przetestowaś (zrobić assert) czy odpowiedź z serwera to 200 / 201 (201 w tym przypadku)

1 użytkowników online, w tym zalogowanych: 0, gości: 1