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 Model Tests

I'm having trouble with the first testing code challenge

Hi,

I'm stuck on the first testing code challenge,

Now add a test that creates an instance of the Writer model and, using self.assertIn, make sure the email attribute is in the output of the mailto() method.

I have created an instance of the Writer model (named 'writer') and I'm trying to access the output of the mailto() method by using writer.mailto or writer.mailto() - but both fail and I don't understand why. My code is pasted below, any help appreciated as I've been staring at this for a while now!

# articles/tests.py

from django.test import TestCase

from .models import Writer


class WriterModelTestCase(TestCase):
    '''Tests for the Writer model'''
    writer = Writer.objects.create(
            name="George Orwell",
            email="george@1984.com",
            bio="Dystopian fiction is my game."
    )

    self.assertIn(writer.email, 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)

2 Answers

Jennifer Nordell
seal-mask
STAFF
.a{fill-rule:evenodd;}techdegree
Jennifer Nordell
Treehouse Teacher

Hi there, Chris Guy ! Looks like you're doing terrific! I only see two things that are sort of missing. First, the test case should be a method on that class you just made. I might suggest defining a method named something like test_mailto_method passing in self. Secondly, mailto is not an attribute, it is a method so where you have writer.mailto you will need writer.mailto().

Hope these hints help, but let me know if you're still stuck! :sparkles:

Hey Jennifer Nordell

Thanks, that made sense (in the end) - though I also needed to add a setUp to make it work as expected...

from django.test import TestCase

from .models import Writer

class WriterModelTestCase(TestCase):
    '''Tests for the Writer model'''
    def setUp(self):
        self.writer = Writer.objects.create(
                name="George Orwell",
                email="george@1984.com",
                bio="Dystopian fiction is my game."
        )

    def test_mailto_method(self):
        self.assertIn(self.writer.email, self.writer.mailto())

Is this what you had in mind?