Search code examples
pythonnosenosetests

Override existing configuration when using nose in Python in a script


I'm trying to setup Python to execute nose, but only on an existing application I'm developing locally. I don't want nose running around all libraries that are currently installed. I do, however, want nose to discover any tests within the current working directory and child directories.

To start with, all I'm trying to do is make sure that the arguments I'm passing are being used (solved by @need-batchelder below). However, at the moment it looks like the arguments I am passing are being ignored, and global discovery of the tests is occurring (i.e. picking up tests from the python folder too.

From the docs:

     -V, --version
     Output nose version and exit

Running nosetests -V from the command line produces the expected version output:

     nosetests -V
     nosetests-script.py version 1.2.1

However, the following test script starts running every test it can find, including those of libraries installed in the python path and not part of the current working directory , even though it is located in the root of the application:

import nose, os

def main():
    print os.getcwd()
    x=raw_input() #This is just so I can see the output of the cwd before it launches into testing everything it can find.
    result = nose.run(argv=['-V']) 

if __name__ == '__main__':
    main()

Here's what I've tried:

  • Using nose.main() , x=nose.core.run() , x=nose.run().
  • Passing the arguments directly to nose.run() and using a list.
  • Using a nose.cfg file.

Thanks

EDIT: Trying @ned-batchelder 's suggestion allows me to run nose with given arguments, but doesn't allow discovery of tests within the application folders. So if I do that, I can pass arguments but I can't test my application.


Solution

  • I believe nose expects argv to be the complete argv, meaning the first element should be the name of the program:

    nose.run(argv=['me.py', '-V'])