Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Django Basics Test Time Test our Writer model

Lewis Cowles
Lewis Cowles
74,902 Points

Something is wrong with the test in Django-basics for testing writer model.

using the following test method within WriterModelTestCase class fails in the code challenge but works in the workspaces, and both use self.assertIn

    def test_writer_instantiate(self):
      '''Tests instantiation of writer class'''
      testemail = "bob@bob.com"
      writer = Writer( name="Bob", email=testemail, bio="" )
      self.assertIn( testemail, writer.mailto() )
articles/tests.py
from django.test import TestCase

from .models import Writer

class WriterModelTestCase(TestCase):
    '''Tests for the Writer model'''

    def test_writer_instantiate(self):
      '''Tests instantiation of writer class'''
      testemail = "bob@bob.com"
      writer = Writer( name="Bob", email=testemail, bio="" )
      self.assertIn( testemail, writer.mailto() )
articles/models.py
from django.db import models


class Article(models.Model):
    headline = models.CharField(max_length=255)
    publish_date = models.DateTimeField()
    content = models.TextField()
    writer = models.ForeignKey('Writer')

    def __str__(self):
        return self.headline


class Writer(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField()
    bio = models.TextField()

    def __str__(self):
        return self.name

    def mailto(self):
        return '{} <{}>'.format(self.name, self.email)
Lewis Cowles
Lewis Cowles
74,902 Points

Also verified test failing using the following syntax (similar to Kenneth's syntax in the previous video)

from django.test import TestCase

from .models import Writer

class WriterModelTestCase(TestCase):
    '''Tests for the Writer model'''
    def test_writer_inst(self):
        writer = Writer.objects.create(
            name="bob",
            bio="bio",
            email="a@b.c"
        )
        self.assertIn( writer.email, writer.mailto() )

2 Answers

Kenneth Love
STAFF
Kenneth Love
Treehouse Guest Teacher

I've updated the validation so your solution passes. I wasn't allowing for a space before the final ) in the self.assertIn bit. FWIW, that extra space is kind of a bad habit, at least in Python.

Lewis Cowles
Lewis Cowles
74,902 Points

Thanks dude, I honestly think it makes it more readable to have spaces everywhere, but am aware I am an oddity as I often fall out with PHP and C devs for my spacing...

Andrew Winkler
Andrew Winkler
37,739 Points

Lewis's version passes. The original question's code is missing the writer.objects.create() function that creates the attributes initially. If they aren't created, can't test their consistency.