Reputation: 8187
I'm launching the below code with the command $ python manage.py test
, and it's returning the error:
TypeError: __init__() takes 1 positional argument but 2 were given
As far as I can see I'm only passing self
to the __init__ method
, where is this additional arg coming from? I've checked multiple answers on here and looked at the django docs, but can't seem to find my error.
What is causing this?
Code:
import requests
import json
from django.contrib.auth.models import User
from django.test import TestCase
from django.test import Client
class BasicFunctionality(TestCase):
def __init__(self):
user_name = 'boris_the_blade'
password = 'boris_the_sneaky_russian'
self.client = Client()
self.login_status = self.createUserAndLogin(user_name, password)
def createUserAndLogin(self, user_name, password):
self.user = User.objects.create_user(username=user_name, password=password)
login = self.client.login(username=user_name, password=password)
return login
def test_login(self):
self.assertTrue(self.login_status)
Full terminal output:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/core/management/commands/test.py", line 26, in run_from_argv
super().run_from_argv(argv)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/core/management/commands/test.py", line 56, in handle
failures = test_runner.run_tests(test_labels)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/test/runner.py", line 603, in run_tests
suite = self.build_suite(test_labels, extra_tests)
File "/home/tompreston/.python_virtualenvs/lagoon-back-end-K1-2r-Ad/lib/python3.6/site-packages/django/test/runner.py", line 514, in build_suite
tests = self.test_loader.discover(start_dir=label, **kwargs)
File "/usr/lib/python3.6/unittest/loader.py", line 341, in discover
tests = list(self._find_tests(start_dir, pattern))
File "/usr/lib/python3.6/unittest/loader.py", line 406, in _find_tests
yield from self._find_tests(full_path, pattern, namespace)
File "/usr/lib/python3.6/unittest/loader.py", line 406, in _find_tests
yield from self._find_tests(full_path, pattern, namespace)
File "/usr/lib/python3.6/unittest/loader.py", line 398, in _find_tests
full_path, pattern, namespace)
File "/usr/lib/python3.6/unittest/loader.py", line 452, in _find_test_path
return self.loadTestsFromModule(module, pattern=pattern), False
File "/usr/lib/python3.6/unittest/loader.py", line 123, in loadTestsFromModule
tests.append(self.loadTestsFromTestCase(obj))
File "/usr/lib/python3.6/unittest/loader.py", line 92, in loadTestsFromTestCase
loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames))
File "/usr/lib/python3.6/unittest/suite.py", line 24, in __init__
self.addTests(tests)
File "/usr/lib/python3.6/unittest/suite.py", line 57, in addTests
for test in tests:
TypeError: __init__() takes 1 positional argument but 2 were given
Upvotes: 1
Views: 1018
Reputation: 308849
Don't override the __init__
method of TestCase
to set up test data in the database. Use setUp
instead.
def setUp(self):
user_name = 'boris_the_blade'
password = 'boris_the_sneaky_russian'
self.client = Client() # Django's TestCase already sets self.client so this line isn't required
self.login_status = self.createUserAndLogin(user_name, password)
Upvotes: 11