In the previous Adding Tests post I found that running M-x ert
on its own did not always pick up added or removed tests, but that a test running tool called ert-runner might fix this. It does, and adding another tool called overseer makes it easy to run tests or subsets of tests without leaving Emacs.
Here’s how I got there:
- Install Cask to manage project dependencies, as ert-runner uses it to run the tests from the command-line. I found that the default
brew install cask
didn’t set up~/.cask/cask.el
properly, but the longercurl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python
did.- After that, the usage instructions mostly worked out of the tin.
- Calling
cask init --dev
sets up a Cask file (think Gemfile from ruby projects) with a block of development dependencies. We aren’t using ecukes or el-mock yet, and we’ll add overseer. - I also took out the
(package-file "TODO")
line, as it stoppedcask install
from running. - I had borrowed package-loading from bbatsov’s excellent Prelude: for now I’ve commented that out and put my Emacs package dependencies into the Cask file.
- Running
cask install
puts all the packages in a.cask
directory, so you might want to add that to.gitignore
. - commit for adding Cask
- Calling
- After that, the usage instructions mostly worked out of the tin.
- With
ert-runner
installed by Cask, from the command line, runcask exec ert-runner init
. This creates atest
directory and an emptytest/test-helper.el
file. Previously, our tests for the begin/end functionality were in the same file as the code: forert-runner
to be able to find them, they need to be in the test directory, in a file ending-test.el
. So we move the tests frommods-org.el
totest/mods-org-test.el
.- The newbie / coming from Ruby mistake that I made at this point was to go to the command line and run
cask exec ert-runner
, expecting it to pick up the files automatically. This of course fails. We need to put a(provide 'mods-org)
at the bottom of themods-org.el
file, and a(load-file "mods-org.el")
at the top oftest/mods-org-test.el
. - Having done that, we can run the tests, and they all pass. Further, if some of them fail, we can do the usual thing: comment out all but one of them and re-run and, unlike with
M-x ert
, it picks up the changes and just runs a single test. - commit for reorganizing tests
- The newbie / coming from Ruby mistake that I made at this point was to go to the command line and run
- When going out to the command line or popping open a shell to run
cask exec ert-runner
every time proves irksome, we can take advantage of the fact that we also addedoverseer
, which gives us some handy shortcuts. With a single test file so far, I have been usingC-c , b
to run all the tests from the buffer.
Thanks to Sacha Chua for unblocking me at one point, and sharing a draft post which takes things further into continuous integration and test coverage tools.