In the post on Rails and Selenium I included a rake task for running the tests. For the lazy, here it is again.
namespace :test do
Rake::TestTask.new(:selenium) do |t|
t.libs << "test"
t.pattern = 'test/selenium/**/*_test.rb'
t.verbose = true
end
Rake::Task['test:selenium'].comment = "Run the selenium tests in test/selenium"
end
That is handy if you want to run all your tests, but there are a lot of situations when you really don't want to do that. Like, when you building out new ones as I am doing now.
So how do we constrain what gets run? The TestTask page helps us out by telling us about the TEST argument.
rake test:selenium TEST=selenium/forgot_password_test.rb
This tells rake to only run test methods in selenium/forgot_password_test.rb. One thing to remember is to include the directory it is under the test one (though I suppose you might be able to change t.libs in the actual task to be test/selenium, but...).
Running only a single file is handy, but what if you are following the standard *unit pattern of having a number of logically groups test methods in a single class? By specifying just a filename you get all of them run which is still waaay too long. For this we need to dig a little deeper. Right to the actual test runner in fact.
adam:RB-1.0 adam$ testrb -h
Test::Unit automatic runner.
Usage: /usr/bin/testrb [options] [-- untouched arguments]
-r, --runner=RUNNER Use the given RUNNER.
(c[onsole], f[ox], g[tk], g[tk]2, t[k])
-b, --basedir=DIR Base directory of test suites.
-w, --workdir=DIR Working directory to run tests.
-a, --add=TORUN Add TORUN to the list of things to run;
can be a file or a directory.
-p, --pattern=PATTERN Match files to collect against PATTERN.
-x, --exclude=PATTERN Ignore files to collect against PATTERN.
-n, --name=NAME Runs tests matching NAME.
(patterns may be used).
-t, --testcase=TESTCASE Runs tests in TestCases matching TESTCASE.
(patterns may be used).
-I, --load-path=DIR[:DIR...] Appends directory list to $LOAD_PATH.
-v, --verbose=[LEVEL] Set the output level (default is verbose).
(s[ilent], p[rogress], n[ormal], v[erbose])
-- Stop processing options so that the
remaining options will be passed to the
test.
-h, --help Display this help.
Deprecated options:
--console Console runner (use --runner).
--gtk GTK runner (use --runner).
--fox Fox runner (use --runner).
Hey! -n looks promising.
But how to we get that information through rake to the runner? Going back to the TestTask page there is another argument; TESTOPTS.
rake test:selenium TEST=selenium/forgot_password_test.rb TESTOPTS="--name=test_forgot_password_no_email"
Eureka! It's a bit of extra typing, but with this you can run a single selenium script through rake.
Post a Comment