[TIP] [newbie] run nose tests contained in the current emacs buffer
Tom Roche
Tom_Roche at pobox.com
Thu Jul 28 17:47:12 PDT 2011
I'd appreciate help fixing a problem running `nosetests` on the nose tests in a file within the current emacs buffer. I'm new to nose and fairly new to python, but have been coding awhile and using emacs forever. I'm starting on a nose tutorial
http://ivory.idyll.org/articles/nose-intro.html
> Here's the simplest nose test you can write:
>
> def test_b():
> assert 'b' == 'b'
>
> Put this in a file called test_me.py, and then run nosetests.
on an ubuntu box with python 2.6.5, GNU Emacs 23.1.50.1, and
me at it:~$ sudo easy_install nose
me at it:~$ pushd ~/code/python/nose/
me at it:~/code/python/nose$ ls -al
> -rw-r--r-- 1 me me 36 2011-07-28 18:47 test_me.py
me at it:~/code/python/nose$ nosetests -v
> test_stuff.test_b ... ok
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.015s
>
> OK
But I wanna run from inside emacs, so I
1 downloaded nose.el
https://bitbucket.org/durin42/nosemacs/src/9302529e68be/nose.el
2 hooked it into my init.el via
me at it:~/.emacs.d$ diff -u tlrPython.el~ tlrPython.el
...
> +;;; nose support (for testing)
> +(require 'nose)
> +(add-hook 'python-mode-hook
> + (lambda ()
> + (local-set-key "\C-ca" 'nosetests-all)
> + (local-set-key "\C-cm" 'nosetests-module)
> + (local-set-key "\C-c." 'nosetests-one)
> + (local-set-key "\C-cpa" 'nosetests-pdb-all)
> + (local-set-key "\C-cpm" 'nosetests-pdb-module)
> + (local-set-key "\C-cp." 'nosetests-pdb-one)))
> +
3 byte-compiled everything
4 restarted emacs
But when I open ~/code/python/nose/test_me.py in an emacs buffer and do any of the key sequences
C-c m
C-c .
C-c a
I get buffer=*nosetests* like the following
> -*- mode: compilation; default-directory: "~/code/python/nose/" -*-
> Compilation started at Thu Jul 28 20:25:55
>
> nosetests -v -w nil -c nilsetup.cfg /home/me/code/python/nose/test_me.py
> Traceback (most recent call last):
> File "/usr/local/bin/nosetests", line 9, in <module>
> load_entry_point('nose==1.1.1', 'console_scripts', 'nosetests')()
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/core.py", line 118, in __init__
> **extra_args)
> File "/usr/lib/python2.6/unittest.py", line 816, in __init__
> self.parseArgs(argv)
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/core.py", line 135, in parseArgs
> self.config.configure(argv, doc=self.usage())
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/config.py", line 317, in configure
> self.configureWhere(options.where)
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/config.py", line 400, in configureWhere
> "not a directory" % path)
> ValueError: Working directory nil not found, or not a directory
>
> Compilation exited abnormally with code 1 at Thu Jul 28 20:25:56
The only difference in the *nosetests* buffer is the `nosetests` line, which is variously
C-c m -> nosetests -v -w nil -c nilsetup.cfg /home/me/code/python/nose/test_me.py
C-c . -> nosetests -v -w nil -c nilsetup.cfg /home/me/code/python/nose/test_me.py:test_b
C-c a -> nosetests -v -w nil -c nilsetup.cfg
which looks correct. I note, when running from the (bash) shell, I get
me at it:~/code/python/nose$ nosetests -v -w nil -c nilsetup.cfg /home/me/code/python/nose/test_me.py
... same error as above ...
me at it:~/code/python/nose$ nosetests -v -w . -c nilsetup.cfg /home/me/code/python/nose/test_me.py
> Failure: ImportError (No module named test_me) ... ERROR
>
> ======================================================================
> ERROR: Failure: ImportError (No module named test_me)
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/loader.py", line 390, in loadTestsFromName
> addr.filename, addr.module)
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/importer.py", line 39, in importFromPath
> return self.importFromDir(dir_path, fqname)
> File "/usr/local/lib/python2.6/dist-packages/nose-1.1.1-py2.6.egg/nose/importer.py", line 71, in importFromDir
> fh, filename, desc = find_module(part, path)
> ImportError: No module named test_me
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.005s
>
> FAILED (errors=1)
me at it:~/code/python/nose$ nosetests -v -w . -c nilsetup.cfg test_me.py
> test_me.test_b ... ok
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.004s
>
> OK
me at it:~/code/python/nose$ nosetests -v -w . -c nilsetup.cfg ./test_me.py
> test_me.test_b ... ok
>
> ----------------------------------------------------------------------
> Ran 1 test in 0.006s
>
> OK
me at it:~/code/python/nose$ nosetests -v -w nil -c nilsetup.cfg ./test_me.py
... same error as above ...
So I'm wondering,
1 What should I configure to make nose.el utter the correct `nosetests` to run the nose tests contained in the current buffer?
2 is there a better tool for this usecase (i.e., running the nose tests in the current emacs buffer from within emacs)?
TIA, Tom Roche <Tom_Roche at pobox.com>
More information about the testing-in-python
mailing list