# 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: ../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 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