How To Test A Django Model With Pytest?
Solution 1:
pytest has support for running Python unittest.py style tests. It’s meant for leveraging existing unittest-style projects to use pytest features. Concretely, pytest will automatically collect unittest.TestCase subclasses and their test methods in test files. It will invoke typical setup/teardown methods and generally try to make test suites written to run on unittest, to also run using pytest.
The given tests can be tested with py.test
without any modification, however py.test makes the tests more pythonic.
classSettingsTest(TestCase):
deftest_account_is_configured(self):
assert'accounts'in INSTALLED_APPS
assert'accounts.User' == AUTH_USER_MODEL
classUserTest(TestCase):
defsetUp(self):
self.username = "testuser"
self.email = "testuser@testbase.com"
self.first_name = "Test"
self.last_name = "User"
self.password = "z"
self.test_user = User.objects.create_user(
username=self.username,
email=self.email,
first_name=self.first_name,
last_name=self.last_name
)
deftest_create_user(self):
assertisinstance(self.test_user, User)
deftest_default_user_is_active(self):
assert self.test_user.is_active
deftest_default_user_is_staff(self):
assertnot self.test_user.is_staff
deftest_default_user_is_superuser(self):
assertnot self.test_user.is_superuser
deftest_get_full_name(self):
assert self.test_user.get_full_name() == 'Test User'deftest_get_short_name(self):
assert self.test_user.get_short_name() == self.email
deftest_unicode(self):
assert self.test_user.__unicode__() == self.username
as @Sid mentioned, you can use the @pytest.mark.django_db
marker (decorator) to access the database when running a test without using django.test.TestCase
,
Solution 2:
You can use this plugin that integrates pytest with Django: https://pytest-django.readthedocs.org/en/latest/tutorial.html
The setup and changes to pytest.ini are described here: http://www.johnmcostaiii.net/2013/django-projects-to-django-apps-converting-the-unit-tests/
You will find your example here starting from slide 57. This deck will be useful in testing views as well as models and the settings specific to testing models: https://speakerdeck.com/pelme/testing-django-applications-with-py-dot-test-europython-2013
Specifically look at @pytest.mark.django_db helper documented here: http://pytest-django.readthedocs.org/en/latest/helpers.html
An example for allowing db access in a test also mentioned in the deck above is copied here. Without mark.django_db the test would fail.
import pytest
@pytest.mark.django_db
def test_user_count():
assert User.objects.count() == 0
Post a Comment for "How To Test A Django Model With Pytest?"