CukeTest ========= It can be useful to package commonly-used Cucumber steps as a gem. And every gem needs tests, right? Enter CukeTest. CukeTest helps you test individual Cucumber steps with RSpec, verifying that they pass and fail under the right conditions. Installation ============ sudo gem install cuke-test Usage ===== Suppose you've packaged your Cucumber steps into a gem, and the file structure looks like this: my-cuke-steps lib my-cuke-steps steps.rb spec steps_spec.rb You want to test your custom Cucumber steps in `steps_spec.rb`. Here's how: describe 'My Cuke Steps' do before :all do CukeTest.config.features_path = File.expand_path(File.dirname(__FILE__)) + '/features' end it 'passes when the expectation is met' do # Run an entire feature file feature('success.feature').should pass_cuke # Run just one scenario in a feature file scenario('some_successes_and_some_failures.feature', 'successful scenario').should pass_cuke end it 'fails when the expectation is not met' do feature('failure.feature').should fail_cuke('Text of failing step') end end Now you need to create the feature files against which the above tests will be run. Put them in `spec/features`. Your new file structure should look like this: my-cuke-steps lib my-cuke-steps steps.rb spec steps_spec.rb features failure.feature some_successes_and_some_failures.feature success.feature The last thing you need to do is tell your specs where to find your custom steps. (Otherwise, the steps you're testing will be undefined.) Fortunately, Cucumber automatically loads `.rb` files in the `features` directory. So we just need to require our step library from a new file within `features`: # in spec/features/steps.rb require File.expand_path(File.dirname(__FILE__)) + '../../lib/my-cuke-steps/steps.rb') That's about it for the basic setup. If you're developing a gem where your custom matchers require other code from the same gem (e.g. custom matchers), you'll need to modify `spec/features/steps.rb`: # in spec/features/steps.rb require File.expand_path(File.dirname(__FILE__)) + '../../lib/my-cuke-steps/steps.rb') $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib')) require 'your_gem_name' You have to do this even if you require the gem files from within your specs, because CukeTest spawns a new process for Cucumber. (The spawned process will not inherit the `require` statements from your spec.) Copyright ========= Copyright (c) 2010 Jarrett Colby. See LICENSE for details.