Excluding Unwanted PackagesΒΆ

Normally, nose discovery descends into all packages. Plugins can change this behavior by implementing IPluginInterface.wantDirectory().

In this example, we have a wanted package called wanted_package and an unwanted package called unwanted_package.

>>> import os
>>> support = os.path.join(os.path.dirname(__file__), 'support')
>>> support_files = [d for d in os.listdir(support)
...                  if not d.startswith('.')]
>>> support_files.sort()
>>> support_files
['unwanted_package', 'wanted_package']

When we run nose normally, tests are loaded from both packages.

Note

The function nose.plugins.plugintest.run() reformats test result output to remove timings, which will vary from run to run, and redirects the output to stdout.

>>> from nose.plugins.plugintest import run_buffered as run
>>> argv = [__file__, '-v', support]
>>> run(argv=argv) 
unwanted_package.test_spam.test_spam ... ok
wanted_package.test_eggs.test_eggs ... ok

----------------------------------------------------------------------
Ran 2 tests in ...s

OK

To exclude the tests in the unwanted package, we can write a simple plugin that implements IPluginInterface.wantDirectory() and returns False if the basename of the directory is "unwanted_package". This will prevent nose from descending into the unwanted package.

>>> from nose.plugins import Plugin
>>> class UnwantedPackagePlugin(Plugin):
...     # no command line arg needed to activate plugin
...     enabled = True
...     name = "unwanted-package"
...
...     def configure(self, options, conf):
...         pass # always on
...
...     def wantDirectory(self, dirname):
...         want = None
...         if os.path.basename(dirname) == "unwanted_package":
...             want = False
...         return want

In the next test run we use the plugin, and the unwanted package is not discovered.

>>> run(argv=argv,
...     plugins=[UnwantedPackagePlugin()]) 
wanted_package.test_eggs.test_eggs ... ok

----------------------------------------------------------------------
Ran 1 test in ...s

OK