wiki:WikiStart
Warning: Can't synchronize with repository "(default)" (Unsupported version control system "git": Can't find an appropriate component, maybe the corresponding plugin was not enabled? ). Look in the Trac log for more information.

tddspry

Collection of testcases and helpers to test Django projects and applications with  nose and  twill libraries.

Key features

  • Full support of all features from django.test.TestCase or django.test.TransationalTestCase classes.
  • Run tests for Django projects and applications via nosetests command instead of python manage.py test. You don't need to place tests in tests module - nosetests automaticly find its in project or application.
  • Assert methods for testing Django models (assert_create, assert_count, assert_read, etc).
  • Test web responses with twill library instead of using django.test.Client.
  • Helpers for make particular actions in tests (like create users or superusers, login or logout from projects).

Quick examples

Writing tests

Database test

Check that username field of standart auth.User model is unique:

from tddspry.django import TestCase

from django.contrib.auth.models import User


TEST_EMAIL = 'test-email@domain.com'
TEST_PASSWORD = 'test-password'
TEST_USERNAME = 'test-username'


class TestUserModel(TestCase):

    def test_unique(self):
        self.assert_create(User,
                           username=TEST_USERNAME,
                           password=TEST_PASSWORD,
                           email=TEST_EMAIL)
        self.assert_raises(Exception,
                           self.assert_create,
                           User,
                           username=TEST_USERNAME,
                           password=TEST_PASSWORD,
                           email=TEST_EMAIL)

HTTP (twill) test

Login into project and check that some links exists in index page:

from tddspry.django import TestCase


class TestHttp(TestCase):

    def setup(self):
        # Create user
        self.user = self.helper('create_user')

        # Login this user into project
        self.login(self.helpers.USERNAME, self.helpers.PASSWORD)

    def test_index_links(self):
        # Login, logout and profile urls
        login_url = self.build_url('auth_login')
        logout_url = self.build_url('auth_logout')
        profile_url = self.build_url('auth_profile')

        # Go to index page
        self.go200('/')

        # Login url does not exist cause user already logged in
        self.notfind(login_url)
 
        # But logout and profile url exist, and profile url find 3 times in the page
        self.find(logout_url)
        self.find(profile_url, count=3)

Running tests

There are two ways to run tests in your project.

First, using nosetests command, e.g.:

$ nosetests --with-django --django-settings=project.settings project
$ DJANGO_SETTINGS_MODULE=project.settings NOSE_WTIH_DJANGO=1 nosetests project

This way requires install tddspry to your system.

And second, using django-nosetests.py script, e.g.:

$ django-nosetests.py --django-settings=project.settings project
$ DJANGO_SETTINGS_MODULE=project.settings django-nosetests.py project

This script is wrapper to previous method (you don't need to run nosetests with --with-django option or NOSE_WTIH_DJANGO environment var), but does not require install tddspry to your system (it's good idea if you want use latest development version of tddspry). Script located in bin/ directory.

Otherwise, you can use all  power of nosetests command to run tests in your Django project or applications.

Requirements

License

tddspry is licensed under the  BSD license.

Installation

On most UNIX-like systems, you'll probably need to run these commands as root or using sudo.

To install use:

$ pip install tddspry

Or:

$ python setup.py install

Also, you can retrieve fresh version of tddspry from  GitHub:

$ git clone git://github.com/playpauseandstop/tddspry.git

and place tddspry directory somewhere to PYTHONPATH (or sys.path).

Documentation

 Sphinx-generated documentation for tddspry located at  GitHub pages. This documentation updates after every tddspry release.

Fresh documentation always can access in docs/ directory.

Sending bugs and feature requests

Found a bug? Have a good idea for improving tddspry? Head over to  tddspry's trac to create a new ticket or to  GitHub to create a new fork.

Contacts

Authors:

Igor Davydenko < playpauseandstop [at] gmail >, Volodymyr Hotsyk < gotsyk [at] gmail >

Idea:

Andriy Khavryuchenko < akhavr [at] gmail >