Skip to main content

A nose plugin that supports writing describe/it style unit tests with nested contexts

Project description


Describe-it is a nose plugin that allows you to write unit tests that are more like executable examples of how a component should work than just being tests.

The other benefit is the ability to describe how a component behaves in certain contexts, where one context may build on a previously defined context by using nesting.


$ pip install describe-it


Any module that ends with ‘spec’ is considered to contain specifications/tests for describe_it.

$ vim

…and the content:

from game import Game
from describe_it import describe, it, before_each, Fixture

@describe                                               # This declares a test context.
def a_game():
    f = Fixture()                                       # Fixture is a hack to get around
                                                        # Python's implementation of closures.
                                                        # You can use other methods, such as
                                                        # nonlocal if you like.

    @before_each                                        # Will be called before each 'it'
    def setup(): = Game()

    @after_each                                         # Will be called after each 'it'
    def teardown():
        perform_post_test_cleanup_if_needed()           # This should rarely be needed!

    @it                                                 # This marks a test method.
    def is_player_ones_turn():
        assert == 1               # describe_it doesn't come with an
                                                        # assertion lib. Pick any one you like.

    @describe                                           # This is a nested context that
    def in_second_round():                              # augments the context above.

        @before_each                                    # Before each 'it' method, any
        def setup():                                    # before_each in outer contexts will
                           # be called first. Then this method
                                                        # will be called.

        def is_player_twos_turn():
            assert == 2

        @xit                                            # You can skip individual test methods
        def skips_tests():                              # by using '@xit' or '@it_skip'
            assert True

        @with_data([1, 2, 3],                           # You can parameterize tests with
                   [3, 4, 7])                           # different combinations of inputs
        def adds_numbers(term_1, term_2, expected):
            assert term_1 + term_2 == expected

 @xdescribe                                             # You can skip whole contexts by
 def this_context_is_marked_as_skipped():               # using '@xdescribe' or '@describe_skip'

    def this_test_will_be_skipped():
        assert True


$ nosetests --with-describe-it

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for describe_it, version 2.2.2
Filename, size File type Python version Upload date Hashes
Filename, size describe_it-2.2.2.tar.gz (5.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page