I'm not sure what I'm doing wrong. I'm trying to follow this example: https://docs.djangoproject.com/en/1.6/topics/testing/advanced/#module-django.test.client
I've created my test and the return is odd.
tests.py:
from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import RequestFactory
from project_name.app_name.views import ViewName
class UrlsViewsTest(TestCase):
def setUp(self):
# every test needs access to the request RequestFactory
self.factory = RequestFactory()
self.user = User.objects.create_user(username='dave', email='dave@mail.com', password='top_secret')
def tearDown(self):
# Delete those objects that are saved in setup
self.user.delete()
def test_view_name(self):
#Create an instance of a GET request
request = self.factory.get('/app/')
# Recall that middleware are not suported. You can simulate a
# logged-in user by setting request.user manually.
request.user = self.user
# Test ViewName() as if it were deployed at /app/
response = ViewName(request)
self.assertEqual(response.status_code, 200)
Results:
Creating test database for alias 'default'...
E
======================================================================
ERROR: test_view_name (project_name.app_name.tests.UrlsViewsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/dave/sandbox/project_name/project_name/app_name/tests.py", line 25, in test_view_name
response = ViewName(request)
TypeError: __init__() takes exactly 1 argument (2 given)
----------------------------------------------------------------------
Ran 1 test in 0.168s
FAILED (errors=1)
Destroying test database for alias 'default'...
I'm not able to figure out what the following means:
TypeError: __init__() takes exactly 1 argument (2 given)
How do I sort out what that means and how do I fix it?
I've been looking in the Django Google Groups and here on SO. I'm not seeing examples.
You don't need to delete objects in teardown, the test database will reset itself for each test definition in a TestCase class. The teardown is only needed for things like mock and mox that define new code.
Here's a summary of the message thread so this question can be logged as answered:
Solution1:
response = ViewName.as_view()(request)
Solution2:
# ignore importing ViewName and RequestFactory
response = self.client.login_as(user=self.user)
response = self.client.get('/app/')
Solution3: Direct unit testing only the functions you've written
self.view = ViewName()
output = self.view.new_function(input)
self.assertEqual(output, expected)