Django v1.2 TestCase doesn't seem to load fixtures except 'initial_data'

269 views
Skip to first unread message

Bryan

unread,
May 26, 2010, 4:28:25 PM5/26/10
to Django users
I am using Django v1.2

The fixture I defined "forum_fixtures.json" don't seem to be loading
when I run tests.

from django.test.client import Client
from django.test import TestCase
from utils import *
from forum.models import *
from forum import auth
from django.contrib.contenttypes.models import ContentType


class UserProfileTestCases(TestCase):
"""These are tests to verify that refactoring of UserProfile is
correct"""
fixtures = ['forum_fixtures.json'] ## @ forum/fixtures/
forum_fixtures.json
def setUp(self):
self.client = Client()
if self.client.login(username='DickCheney', password='test'):
print "client.login DickCheney successful";
else:
print "client.login FAILED"

def test_set_new_email(self):
orig_email = User.objects.get(username='DickCheney')
response = self.client.post('changeemail',
{u'email':'cockG...@nwo.gov'})

self.assertNotEqual(User.objects.get(username='DickCheney').email,
orig_email)

I ran the tests verbosely:
python manage.py test --verbosity=2

Django only looked for fixtures named 'initial_data'. Not once was
there are search for 'forum_fixtures.json'

I changed the fixture name to 'initial_data.json' and it now works.

I just thought I'd post the work around.

Karen Tracey

unread,
May 27, 2010, 8:33:21 AM5/27/10
to django...@googlegroups.com
Loading of non-initial-data fixtures during testing does work in 1.2. I've just confirmed it with one of my own projects. If this did not work I'd expect we'd quickly hear of it from multiple sources and I'm pretty sure a number of Django's own tests would fail.

Diagnostics for the case where a file specified in a TestCase fixtures attribute is not found are poor. If I change the name of my test fixture file on disk without changing the test that refers to it, there is nothing in the test output, even at verbosity 2, other than errors from the failing tests cases that require the fixture, to indicate the problem. There is exhaustive output regarding trying to load initial_data fixtures, but nothing for the fixtures specified on an individual test case. I thought there had been a ticket that addressed this fairly late in the 1.2 cycle but I must be mis-remembering because I don't see any better diagnostics here with 1.2 than I did with earlier versions.

Are you absolutely sure the name of the file on disk matched what you had listed in the TestCase fixtures line?

Karen
--
http://tracey.org/kmt/

Bryan

unread,
May 27, 2010, 3:34:49 PM5/27/10
to Django users
I just checked this again.

I changed the fixtures name to:

$ ls forum/fixtures
forum_fixtures.json

class UserProfileTestCases(TestCase):
"""These are tests to verify that refactoring of UserProfile is
correct"""
fixtures = ['forum_fixtures.json']

$ python manage.py test
Creating test database 'default'...
<<SNIP>>
No fixtures found.

I don't know why this is happening, but it is. :-(

Bryan

On May 27, 8:33 am, Karen Tracey <kmtra...@gmail.com> wrote:


> On Wed, May 26, 2010 at 4:28 PM, Bryan <bryan.wheel...@gmail.com> wrote:
> > I am using Django v1.2
>
> > The fixture I defined "forum_fixtures.json" don't seem to be loading
> > when I run tests.
>
> > from django.test.client import Client
> > from django.test import TestCase
> > from utils import *
> > from forum.models import *
> > from forum import auth
> > from django.contrib.contenttypes.models import ContentType
>
> > class UserProfileTestCases(TestCase):
> >    """These are tests to verify that refactoring of UserProfile is
> > correct"""
> >    fixtures = ['forum_fixtures.json'] ## @ forum/fixtures/
> > forum_fixtures.json
> >    def setUp(self):
> >        self.client = Client()
> >        if self.client.login(username='DickCheney', password='test'):
> >            print "client.login DickCheney successful";
> >        else:
> >            print "client.login FAILED"
>
> >    def test_set_new_email(self):
> >        orig_email = User.objects.get(username='DickCheney')
> >        response = self.client.post('changeemail',

> > {u'email':'cockGobb...@nwo.gov <u%27email%27%3A%27cockGobb...@nwo.gov>'})

Karen Tracey

unread,
May 27, 2010, 4:51:12 PM5/27/10
to django...@googlegroups.com
On Thu, May 27, 2010 at 3:34 PM, Bryan <bryan.w...@gmail.com> wrote:
just checked this again.

I changed the fixtures name to:

$ ls forum/fixtures
forum_fixtures.json

class UserProfileTestCases(TestCase):
   """These are tests to verify that refactoring of UserProfile is
correct"""
   fixtures = ['forum_fixtures.json']

$ python manage.py test
Creating test database 'default'...
<<SNIP>>
No fixtures found.

I don't know why this is happening, but it is. :-(

All I can say is it's working for me, really, and I honestly expect if this were in fact broken in general we'd have heard a lot more about it than a single report.

Also, the "No fixtures found" just means no initial data fixtures were found. I get the "No fixtures found" for my working test run that requires a fixture file to be successfully loaded. As I tried to note in my previous response, the feedback related to loading non-initial-data fixtures in the test runner is poor. Near as I can tell it is nonexistent.  (There's likely a good reason for that -- these things are loaded for each and every test method in the test case, so any output would potentially be repeated many many times. I've not looked at this code in any detail yet to see if an error situation with a fixture not being found can reasonably be reported.)

What happens if you change your settings file to point to a temporary/test DB and try manage.py loaddata for this fixture? The output there should tell you whether any fixture with that name is found, and if so, how many objects were loaded from it. Further, you could actually then check the DB to see if what was loaded is what you (and your test) are expecting.
 
Karen
--
http://tracey.org/kmt/

Reply all
Reply to author
Forward
0 new messages