Peter Mitrano
Peter Mitrano

Reputation: 2280

nosetests unable to import coverage with virtualenv

I've installed nose and coverage to my virtual env, but it doesn't work

(venv) ../my_cookbook$ nosetests --with-coverage

nose.plugins.cover: ERROR: Coverage not available: unable to import coverage module

I wondered if it was escaping my venv somehow, so I tried this and it worked!

(venv) ../my_cookbook$ ./venv/bin/nosetests --with-coverage

Then I wanted to see if my path was some how messed up.

(venv) ../my_cookbook$ which nosetests

/home/peter/Projects/my_cookbook/venv/bin/nosetests

(venv) ../my_cookbook$ which coverage

/home/peter/Projects/my_cookbook/venv/bin/coverage

So what is going on here? Somehow the nosetests command is escaping my virtualenv but I don't know how.

Upvotes: 2

Views: 1027

Answers (1)

alecxe
alecxe

Reputation: 474231

Unfortunately, I don't have an explanation why the nose plugin is not picking up coverage, but, executing your tests through coverage should be preferred as opposed to using test runner plugins (nose coverage plugin in your case). Quoting Ned Batchelder (the author of coverage):

using a plugin means you are depending on that plugin's behavior being correct and understandable. In the name of being helpful, plugins will have their own logic that may have been the best idea when they were written, but the test runner and/or coverage.py may have changed in the meantime. The plugins tend not to be as well-maintained as the other components. If you can avoid them, you have one less thing to think about.

In other words, run:

$ coverage run -m nose

and to get the coverage report:

$ coverage report 

Upvotes: 2

Related Questions