[Django]-Django test not loading fixture data

8πŸ‘

βœ…

I Am not sure if this fixes your problem, but on this site:

https://code.djangoproject.com/wiki/Fixtures

I found an interesting remark:

you see that Django searches for appnames/fixtures and
settings.FIXTURE_DIRS and loads the first match. So if you use names
like testdata.json for your fixtures you must make sure that no other
active application uses a fixture with the same name. If not, you can
never be sure what fixtures you actually load. Therefore it is
suggested that you prefix your fixtures with the application names,
e.g. myapp/fixtures/myapp_testdata.json .

Applying this (renaming the fixtures with appname as prefix in the filename), solved my problem (I had the same issue as described here)

πŸ‘€michel.iamit

37πŸ‘

Import the TestCase from django.test:

from django.test import TestCase

class test_something(TestCase):
    fixtures = ['one.json', 'two.json']
    ...
  • Not: import unittest
  • Not: import django.utils.unittest
  • But: import django.test

That’s a day of frustration right there.
Stop complaining – it’s in the docs :-/

πŸ‘€John Mee

5πŸ‘

Check if the fixture is really in the right place. From the docs:

Django will search in three locations
for fixtures:

  1. In the fixtures directory of every installed application
  2. In any directory named in the FIXTURE_DIRS setting
  3. In the literal path named by the fixture
πŸ‘€Daniel Hepper

2πŸ‘

One thing to note, when creating the FIXTURE_DIRS constant in your settings file, be sure to leave out the leading β€˜/’ if you have a general fixtures directory off of the root of your project.

Ex:
β€˜/actual/path/to/my/app/fixtures/’

Now, in the settings.py file:
Will NOT work:
FIXTURE_DIRS = β€˜/fixtures/’

Will work:
FIXTURE_DIRS = β€˜fixtures/’

It’s possible this depends on how your other routes are configured, but it was a gotcha that had me scratching my head for a little while. Hope this is useful. Cheers.

πŸ‘€Logrologist

2πŸ‘

A simple mistake I made was adding a custom setUpClass() and forgetting to include super().setUpClass() with it (which of course, is where Django’s logic for loading fixtures lives)

0πŸ‘

For me: required TestCase rather than SimpleTestCase! Still don’t see the data in postgres after import pdb; pdb.set_trace() but the data is there as reported by my API Call tests..

πŸ‘€mattjs

Leave a comment