Upgrading a Rails app to Cucumber 3

Posted About 6 years ago. Visible to the public.

Upgrade gems

You need to update a lof gems. Make sure you don't have any version constraints in your Gemfile or your bundle update won't do anything!

Upgrade cucumber_priority:

bundle update cucumber_priority

Upgrade spreewald:

bundle update spreewald

Upgrade cucumber_factory:

bundle update cucumber_factory

Upgrade parallel_tests:

bundle update parallel_tests

Even on the latest version, parallel_tests will print some deprecation warnings due to using an older formatter API. Maybe there will be a fix for that eventually.

Update cucumber-rails to >= 1.6.0:

bundle update cucumber-rails

Upgrade cucumber:

bundle update cucumber

Make sure you have a recent version of geordi (it doesn't belong in your Gemfile!):

gem install geordi

Check if you're using Transforms

Transform is no longer supported in Cucumber 3.

There is something similiar called ParameterType Show archive.org snapshot . A ParameterType is no longer applied blindly to all strings that match. Step definitions need to explicitely define that they're using a ParameterType.

Use the new tag syntax

Cucumber 1/2 Cucumber 3
@tag @tag
~@tag not @tag
@foo, @bar (@foo or @bar)

So you need to replace a hook like this:

AfterStep('~@javascript') do
  ...
end

With this:

AfterStep('not @javascript') do
  ...
end

Also grep your entire project for ~@ and change it to "not @". Note that you need to quote both words if it's a shell command arg.

You will probably find this line in your config/cucumber.yml:

  std_opts = "-r features --format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip"

Change it to:

  std_opts = "-r features --format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags 'not @wip'"

Fix step definitions

I had some errors like IndexError: index 2 out of matches.

This can have 2 causes:

  • You have a step definition that defines capture groups in its regular expression, but the block takes a different number of arguments.
  • Allegedly the Cucumber 3 parser only counts top-level regexp groups, ignoring nested capture groups (I could not confirm that).

Read more

Upgrading to Cucumber 3.0.0 on cucumber.io Show archive.org snapshot

Henning Koch
Last edit
About 6 years ago
Henning Koch
License
Source code in this card is licensed under the MIT License.
Posted by Henning Koch to makandra dev (2018-02-28 17:30)