django-noserun for testing

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
"""
noserun/__init__.py here
"""

# vim: tabstop=4 expandtab autoindent shiftwidth=4 fileencoding=utf-8

import os
import sys
if not os.environ.has_key('DJANGO_SETTINGS_MODULE'): 
    print 'DJANGO_SETTINGS_MODULE not set'
    sys.exit(1)

from django.conf import settings

from django.core.management.commands import syncdb   

from django.db import connection

from django.test import utils

import nose

def run_tests(test_labels, verbosity=2, interactive=True, extra_tests=[]):
    """Run tests with nose
    """

    ### Preamble
    # Remember our real database name for restore-after-destruct
    real_db = settings.DATABASE_NAME
    cmd_dict = {
        'verbosity': verbosity,
        'interactive': interactive,
    }

    ### The real deal
    ## Setup
    utils.setup_test_environment()

    ## Create test db
    test_db = connection.creation.create_test_db(verbosity)
    if verbosity:
        print 'Created db %s' % test_db

    # syncdb
    cmd = syncdb.Command()
    cmd.handle_noargs(**cmd_dict)

    ## Find tests
    # Not needed with nose <3

    ## Run tests
    # Command line handling
    argv = sys.argv
    if verbosity == 2:
        argv.append('-s')

    # Always do doctests, because Django does them too!
    # At least I believe/hope it does ;)
    argv.append('--with-doctest')

    # manage.py doesn't like arbitrary args, use environment
    if os.environ.has_key('NOSE_COVER'):
        argv.append('--with-coverage')

    if verbosity == 2:
        print 'Running nose'
        print '    Test labels', test_labels
        print '    Extra tests', extra_tests

    # Pass argv explicitly here
    # The above assignment sets a reference and Just Works,
    # but this makes it more obvious
    if test_labels:
        for label in test_labels:
            nose.run(module=label, argv=argv)
    else:
        nose.run(argv=argv)

    ## Destroy test db
    if not os.environ.has_key('NO_DROPDB'):
        connection.creation.destroy_test_db(real_db, verbosity)
    if verbosity:
        print 'OK'

    ## Teardown
    utils.teardown_test_environment()


# EOF

"""
noserun/test.py here
"""

# vim: tabstop=4 expandtab autoindent shiftwidth=4 fileencoding=utf-8

from django.core.management import call_command

from django.core import mail

from nose.util import try_run

from django import test

class TestCase(test.TestCase):
    """Sane TestCase for nose
    """

    def setUp(self):
        names = ('setup',)
        try_run(self, names)

    def tearDown(self):
        names = ('teardown',)
        try_run(self, names)

    def _pre_setup(self):
        """Otherwise the superclass _pre_setup but skip everything
        related to fixtures.
        """

        if hasattr(self, 'urls'):
            self._old_root_urlconf = settings.ROOT_URLCONF
            settings.ROOT_URLCONF = self.urls
            clear_url_caches()
        mail.outbox = []

def flush(verbosity=0, interactive=False):
    """Shortcut to flush db
    """

    call_command('flush', verbosity=verbosity, interactive=interactive)

def loaddata(*fixtures, **kwargs):
    """A list of fixtures to load, kwargs given as **{'verbosity': 0}
    and defaults to exactly that
    """

    if not kwargs:
        kwargs = {'verbosity': 0}
    call_command('loaddata', *fixtures, **kwargs)

# EOF

More like this

  1. safe(r) monkeypatching scheme for django testing by showell 4 years, 4 months ago
  2. TestCase base class to easily temporarily change module values by SmileyChris 3 years, 9 months ago
  3. Django and Twill by spookylukey 6 years ago
  4. Reset cache between tests by peterbe 4 years, 5 months ago
  5. Custom nose runner by tomas 4 years, 10 months ago

Comments

(Forgotten your password?)