1

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.

1

2 Answers 2

5

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'])
Sign up to request clarification or add additional context in comments.

4 Comments

Hmm, just tried your suggestion (on another file, 'main.py', and the traceback shown above.
Your traceback is because you are running inside IDLE. If you run it from the command line, it will work right.
Thanks, you're right in that this does run correctly from command line, and that now it is accepting arguments. However, by passing a single script (or a list of scripts...) to act on, I lose the ability for nose to discover my tests. What I really need is for nose to execute from the current working directory, with the given config. I'll edit the question to clarify this, but thanks for getting me a bit further on with this.
You misunderstand. Argv's typically start with the name of the running program. Nose expects this, so it ignores argv[0].
1

Probably, what you want is:

arguments = sys.argv[:1] + my_custom_argument_list + sys.argv[1:]
nose.run(argv=arguments)

This will allow you to use your custom arguments as well as those from the command line that invokes your script. It also address the issue that Ned points out about nose requiring that the first argument point to the script.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.