AllModules: collect tests in all modules

Use the AllModules plugin by passing --all-modules or setting the NOSE_ALL_MODULES environment variable to enable collection and execution of tests in all python modules. Normal nose behavior is to look for tests only in modules that match testMatch.

More information: Finding tests in all modules

Warning

This plugin can have surprising interactions with plugins that load tests from what nose normally considers non-test modules, such as the doctest plugin. This is because any given object in a module can’t be loaded both by a plugin and the normal nose test loader. Also, if you have functions or classes in non-test modules that look like tests but aren’t, you will likely see errors as nose attempts to run them as tests.

Options

--all-modules

Enable plugin AllModules: Collect tests from all python modules. [NOSE_ALL_MODULES]

Plugin

class nose.plugins.allmodules.AllModules

Bases: nose.plugins.base.Plugin

Collect tests from all python modules.

options(parser, env)

Register commandline options.

wantFile(file)

Override to return True for all files ending with .py

wantModule(module)

Override return True for all modules

Source

"""Use the AllModules plugin by passing ``--all-modules`` or setting the
NOSE_ALL_MODULES environment variable to enable collection and execution of
tests in all python modules. Normal nose behavior is to look for tests only in
modules that match testMatch.

More information: :doc:`../doc_tests/test_allmodules/test_allmodules`

.. warning ::

   This plugin can have surprising interactions with plugins that load tests
   from what nose normally considers non-test modules, such as
   the :doc:`doctest plugin <doctests>`. This is because any given
   object in a module can't be loaded both by a plugin and the normal nose
   :class:`test loader <nose.loader.TestLoader>`. Also, if you have functions
   or classes in non-test modules that look like tests but aren't, you will
   likely see errors as nose attempts to run them as tests.

"""

import os
from nose.plugins.base import Plugin

class AllModules(Plugin):
    """Collect tests from all python modules.
    """
    def options(self, parser, env):
        """Register commandline options.
        """
        env_opt = 'NOSE_ALL_MODULES'
        parser.add_option('--all-modules',
                          action="store_true",
                          dest=self.enableOpt,
                          default=env.get(env_opt),
                          help="Enable plugin %s: %s [%s]" %
                          (self.__class__.__name__, self.help(), env_opt))

    def wantFile(self, file):
        """Override to return True for all files ending with .py"""
        # always want .py files
        if file.endswith('.py'):
            return True

    def wantModule(self, module):
        """Override return True for all modules"""
        return True