cucumber-rails-training-wheels 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +156 -0
- data/README.md +29 -0
- data/Rakefile +10 -0
- data/cucumber-rails-training-wheels.gemspec +25 -0
- data/features/step_defintions/rails_steps.rb +21 -0
- data/features/support/env.rb +8 -0
- data/features/use_training_wheels.feature +17 -0
- data/lib/generators/cucumber_rails_training_wheels/feature/USAGE +16 -0
- data/lib/generators/cucumber_rails_training_wheels/feature/feature_generator.rb +27 -0
- data/lib/generators/cucumber_rails_training_wheels/feature/named_arg.rb +20 -0
- data/lib/generators/cucumber_rails_training_wheels/feature/templates/feature.erb +63 -0
- data/lib/generators/cucumber_rails_training_wheels/feature/templates/steps.erb +14 -0
- data/lib/generators/cucumber_rails_training_wheels/install/USAGE +15 -0
- data/lib/generators/cucumber_rails_training_wheels/install/install_generator.rb +33 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps.rb.erb +235 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_cs.rb.erb +127 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_da.rb.erb +105 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_de.rb.erb +127 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_es.rb.erb +127 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_ja.rb.erb +140 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_ko.rb.erb +142 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_no.rb.erb +105 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/step_definitions/web_steps_pt-BR.rb.erb +132 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/support/paths.rb +38 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/support/selectors.rb +44 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/support/web_steps_warning.txt +19 -0
- data/lib/generators/cucumber_rails_training_wheels/install/templates/tasks/cucumber.rake.erb +60 -0
- metadata +148 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
cucumber-rails-training-wheels (1.0.0)
|
5
|
+
cucumber-rails (>= 1.1.1)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionmailer (3.1.0)
|
11
|
+
actionpack (= 3.1.0)
|
12
|
+
mail (~> 2.3.0)
|
13
|
+
actionpack (3.1.0)
|
14
|
+
activemodel (= 3.1.0)
|
15
|
+
activesupport (= 3.1.0)
|
16
|
+
builder (~> 3.0.0)
|
17
|
+
erubis (~> 2.7.0)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
rack (~> 1.3.2)
|
20
|
+
rack-cache (~> 1.0.3)
|
21
|
+
rack-mount (~> 0.8.2)
|
22
|
+
rack-test (~> 0.6.1)
|
23
|
+
sprockets (~> 2.0.0)
|
24
|
+
activemodel (3.1.0)
|
25
|
+
activesupport (= 3.1.0)
|
26
|
+
bcrypt-ruby (~> 3.0.0)
|
27
|
+
builder (~> 3.0.0)
|
28
|
+
i18n (~> 0.6)
|
29
|
+
activerecord (3.1.0)
|
30
|
+
activemodel (= 3.1.0)
|
31
|
+
activesupport (= 3.1.0)
|
32
|
+
arel (~> 2.2.1)
|
33
|
+
tzinfo (~> 0.3.29)
|
34
|
+
activeresource (3.1.0)
|
35
|
+
activemodel (= 3.1.0)
|
36
|
+
activesupport (= 3.1.0)
|
37
|
+
activesupport (3.1.0)
|
38
|
+
multi_json (~> 1.0)
|
39
|
+
arel (2.2.1)
|
40
|
+
aruba (0.4.6)
|
41
|
+
bcat (>= 0.6.1)
|
42
|
+
childprocess (>= 0.2.0)
|
43
|
+
cucumber (>= 1.0.2)
|
44
|
+
rdiscount (>= 1.6.8)
|
45
|
+
rspec (>= 2.6.0)
|
46
|
+
bcat (0.6.2)
|
47
|
+
rack (~> 1.0)
|
48
|
+
bcrypt-ruby (3.0.1)
|
49
|
+
builder (3.0.0)
|
50
|
+
capybara (1.1.1)
|
51
|
+
mime-types (>= 1.16)
|
52
|
+
nokogiri (>= 1.3.3)
|
53
|
+
rack (>= 1.0.0)
|
54
|
+
rack-test (>= 0.5.4)
|
55
|
+
selenium-webdriver (~> 2.0)
|
56
|
+
xpath (~> 0.1.4)
|
57
|
+
childprocess (0.2.2)
|
58
|
+
ffi (~> 1.0.6)
|
59
|
+
cucumber (1.1.0)
|
60
|
+
builder (>= 2.1.2)
|
61
|
+
diff-lcs (>= 1.1.2)
|
62
|
+
gherkin (~> 2.5.0)
|
63
|
+
json (>= 1.4.6)
|
64
|
+
term-ansicolor (>= 1.0.6)
|
65
|
+
cucumber-rails (1.1.1)
|
66
|
+
capybara (>= 1.1.1)
|
67
|
+
cucumber (>= 1.1.0)
|
68
|
+
nokogiri (>= 1.5.0)
|
69
|
+
database_cleaner (0.6.7)
|
70
|
+
diff-lcs (1.1.3)
|
71
|
+
erubis (2.7.0)
|
72
|
+
ffi (1.0.9)
|
73
|
+
gherkin (2.5.1)
|
74
|
+
json (>= 1.4.6)
|
75
|
+
hike (1.2.1)
|
76
|
+
i18n (0.6.0)
|
77
|
+
json (1.6.1)
|
78
|
+
json_pure (1.6.1)
|
79
|
+
mail (2.3.0)
|
80
|
+
i18n (>= 0.4.0)
|
81
|
+
mime-types (~> 1.16)
|
82
|
+
treetop (~> 1.4.8)
|
83
|
+
mime-types (1.16)
|
84
|
+
multi_json (1.0.3)
|
85
|
+
nokogiri (1.5.0)
|
86
|
+
polyglot (0.3.2)
|
87
|
+
rack (1.3.4)
|
88
|
+
rack-cache (1.0.3)
|
89
|
+
rack (>= 0.4)
|
90
|
+
rack-mount (0.8.3)
|
91
|
+
rack (>= 1.0.0)
|
92
|
+
rack-ssl (1.3.2)
|
93
|
+
rack
|
94
|
+
rack-test (0.6.1)
|
95
|
+
rack (>= 1.0)
|
96
|
+
rails (3.1.0)
|
97
|
+
actionmailer (= 3.1.0)
|
98
|
+
actionpack (= 3.1.0)
|
99
|
+
activerecord (= 3.1.0)
|
100
|
+
activeresource (= 3.1.0)
|
101
|
+
activesupport (= 3.1.0)
|
102
|
+
bundler (~> 1.0)
|
103
|
+
railties (= 3.1.0)
|
104
|
+
railties (3.1.0)
|
105
|
+
actionpack (= 3.1.0)
|
106
|
+
activesupport (= 3.1.0)
|
107
|
+
rack-ssl (~> 1.3.2)
|
108
|
+
rake (>= 0.8.7)
|
109
|
+
rdoc (~> 3.4)
|
110
|
+
thor (~> 0.14.6)
|
111
|
+
rake (0.9.2)
|
112
|
+
rdiscount (1.6.8)
|
113
|
+
rdoc (3.9.4)
|
114
|
+
rspec (2.6.0)
|
115
|
+
rspec-core (~> 2.6.0)
|
116
|
+
rspec-expectations (~> 2.6.0)
|
117
|
+
rspec-mocks (~> 2.6.0)
|
118
|
+
rspec-core (2.6.4)
|
119
|
+
rspec-expectations (2.6.0)
|
120
|
+
diff-lcs (~> 1.1.2)
|
121
|
+
rspec-mocks (2.6.0)
|
122
|
+
rspec-rails (2.6.1)
|
123
|
+
actionpack (~> 3.0)
|
124
|
+
activesupport (~> 3.0)
|
125
|
+
railties (~> 3.0)
|
126
|
+
rspec (~> 2.6.0)
|
127
|
+
rubyzip (0.9.4)
|
128
|
+
selenium-webdriver (2.7.0)
|
129
|
+
childprocess (>= 0.2.1)
|
130
|
+
ffi (>= 1.0.7)
|
131
|
+
json_pure
|
132
|
+
rubyzip
|
133
|
+
sprockets (2.0.1)
|
134
|
+
hike (~> 1.2)
|
135
|
+
rack (~> 1.0)
|
136
|
+
tilt (~> 1.1, != 1.3.0)
|
137
|
+
term-ansicolor (1.0.6)
|
138
|
+
thor (0.14.6)
|
139
|
+
tilt (1.3.3)
|
140
|
+
treetop (1.4.10)
|
141
|
+
polyglot
|
142
|
+
polyglot (>= 0.3.1)
|
143
|
+
tzinfo (0.3.30)
|
144
|
+
xpath (0.1.4)
|
145
|
+
nokogiri (~> 1.3)
|
146
|
+
|
147
|
+
PLATFORMS
|
148
|
+
ruby
|
149
|
+
|
150
|
+
DEPENDENCIES
|
151
|
+
aruba (>= 0.4.6)
|
152
|
+
cucumber-rails-training-wheels!
|
153
|
+
database_cleaner (>= 0.6.7)
|
154
|
+
rails (>= 3.1.0)
|
155
|
+
rspec (>= 2.6.0)
|
156
|
+
rspec-rails (>= 2.6.1)
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Cucumber-Rails Training Wheels
|
2
|
+
|
3
|
+
Cucumber-Rails Training Wheels contains a couple of generators to get you started with Cucumber and Rails really quickly. You won't even have to think! There is a little snag: If you don't take those training wheels off immediately you will end up with a complete mess. -And remember - every time you run a Cucumber feature based on Cucumber-Rails Training Wheels, god kills a kitten. But hey, you're running Cucumber!
|
4
|
+
|
5
|
+
You have been warned. I think you should read [The training wheels came off](http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off)
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this to your Gemfile:
|
10
|
+
|
11
|
+
gem "cucumber-rails-training-wheels", :group => :test
|
12
|
+
|
13
|
+
Generate `features/step_definitions/web_steps.rb`, which will make you write really bad features:
|
14
|
+
|
15
|
+
rails generate cucumber_rails_training_wheels:install
|
16
|
+
|
17
|
+
Or generate a feature file:
|
18
|
+
|
19
|
+
rails generate cucumber_rails_training_wheels:feature post title:string body:text number:integer published:boolean
|
20
|
+
rails generate scaffold post title:string body:text number:integer published:boolean
|
21
|
+
|
22
|
+
Congratulations! You have created Cucumber features that no stakeholder will ever want to read. Features that don't express
|
23
|
+
any business value at all, but hey - they are green! Good luck maintaining them. You have become an [MDD](http://skillsmatter.com/podcast/home/refuctoring-your-cukes) pro!
|
24
|
+
|
25
|
+
## Pull requests
|
26
|
+
|
27
|
+
Please don't bother. This gem exists for the sole purpose of helping people who are reading books or blogs that were written prior to Cucumber-Rails 1.1.0. I really want this code to go away and be forgotten.
|
28
|
+
|
29
|
+
If something is broken, just fork it and use your own fork.
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'cucumber-rails-training-wheels'
|
5
|
+
s.version = '1.0.0'
|
6
|
+
s.authors = ["Aslak Hellesøy"]
|
7
|
+
s.description = "Training Wheels for Cucumber-Rails"
|
8
|
+
s.summary = "#{s.name}-#{s.version}"
|
9
|
+
s.email = 'cukes@googlegroups.com'
|
10
|
+
s.homepage = "http://cukes.info"
|
11
|
+
|
12
|
+
s.add_runtime_dependency('cucumber-rails', '>= 1.1.1')
|
13
|
+
|
14
|
+
s.add_development_dependency('rails', '>= 3.1.0')
|
15
|
+
s.add_development_dependency('aruba', '>= 0.4.6')
|
16
|
+
s.add_development_dependency('rspec', '>= 2.6.0')
|
17
|
+
s.add_development_dependency('rspec-rails', '>= 2.6.1')
|
18
|
+
s.add_development_dependency('database_cleaner', '>= 0.6.7')
|
19
|
+
|
20
|
+
s.rubygems_version = ">= 1.6.1"
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
|
23
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_path = "lib"
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Given /^I have created a new Rails 3 app "([^"]*)" with cucumber\-rails support$/ do |app_name|
|
2
|
+
steps %Q{
|
3
|
+
When I successfully run `rails new #{app_name}`
|
4
|
+
Then it should pass with:
|
5
|
+
"""
|
6
|
+
README
|
7
|
+
"""
|
8
|
+
And I cd to "#{app_name}"
|
9
|
+
And I append to "Gemfile" with:
|
10
|
+
"""
|
11
|
+
gem "cucumber-rails-training-wheels", :group => :test, :path => "../../.."
|
12
|
+
gem "cucumber-rails", :group => :test
|
13
|
+
gem "capybara", :group => :test
|
14
|
+
gem "rspec-rails", :group => :test
|
15
|
+
gem "database_cleaner", :group => :test
|
16
|
+
gem 'factory_girl', :group => :test
|
17
|
+
|
18
|
+
"""
|
19
|
+
And I successfully run `bundle exec rails generate cucumber:install`
|
20
|
+
}
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Use training wheels
|
2
|
+
|
3
|
+
Scenario: I don't care. I'll use it anyway. Yee-haa!!
|
4
|
+
Given I have created a new Rails 3 app "rails-3-app" with cucumber-rails support
|
5
|
+
# Generate features/step_definitions/web_steps.rb
|
6
|
+
And I successfully run `rails generate cucumber_rails_training_wheels:install`
|
7
|
+
# Generate features/post_feature.rb
|
8
|
+
And I successfully run `rails generate cucumber_rails_training_wheels:feature post title:string body:text number:integer published:boolean`
|
9
|
+
And I successfully run `rails generate scaffold post title:string body:text number:integer published:boolean`
|
10
|
+
And I run `bundle exec rake db:migrate`
|
11
|
+
And I run `bundle exec rake cucumber`
|
12
|
+
Then it should pass with:
|
13
|
+
"""
|
14
|
+
2 scenarios (2 passed)
|
15
|
+
13 steps (13 passed)
|
16
|
+
"""
|
17
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a skeleton for a new feature. Both a simple .feature file and
|
3
|
+
a steps.rb file is generated. This generator should be used with moderation.
|
4
|
+
See https://github.com/cucumber/cucumber/wiki/Feature-Coupled-Steps-(Antipattern)
|
5
|
+
for details about the dangers involved.
|
6
|
+
|
7
|
+
This generator can take an optional list of attribute pairs similar to Rails'
|
8
|
+
built-in resource generator.
|
9
|
+
|
10
|
+
Examples (Rails 3):
|
11
|
+
`script/rails generate cucumber:feature post` # no attributes
|
12
|
+
`script/rails generate cucumber:feature post title:string body:text published:boolean`
|
13
|
+
|
14
|
+
Examples (Rails 2):
|
15
|
+
`script/generate feature post` # no attributes
|
16
|
+
`script/generate feature post title:string body:text published:boolean`
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'named_arg')
|
2
|
+
|
3
|
+
module CucumberRailsTrainingWheels
|
4
|
+
class FeatureGenerator < ::Rails::Generators::NamedBase
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
6
|
+
|
7
|
+
argument :fields, :optional => true, :type => :array, :banner => "[field:type, field:type]"
|
8
|
+
|
9
|
+
attr_reader :named_args
|
10
|
+
|
11
|
+
def parse_fields
|
12
|
+
@named_args = @fields.nil? ? [] : @fields.map { |arg| NamedArg.new(arg) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate
|
16
|
+
template 'feature.erb', "features/manage_#{plural_name}.feature"
|
17
|
+
template 'steps.erb', "features/step_definitions/#{singular_name}_steps.rb"
|
18
|
+
gsub_file 'features/support/paths.rb', /'\/'/mi do |match|
|
19
|
+
"#{match}\n when /the new #{singular_name} page/\n new_#{singular_name}_path\n"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.banner
|
24
|
+
"#{$0} cucumber:feature ModelName [field:type, field:type]"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module CucumberRailsTrainingWheels
|
2
|
+
class NamedArg
|
3
|
+
attr_reader :name
|
4
|
+
attr_reader :type
|
5
|
+
|
6
|
+
def initialize(s)
|
7
|
+
@name, @type = *s.split(':')
|
8
|
+
end
|
9
|
+
|
10
|
+
def value(n)
|
11
|
+
if @type == 'boolean'
|
12
|
+
(n % 2) == 0
|
13
|
+
elsif @type == 'integer'
|
14
|
+
n
|
15
|
+
else
|
16
|
+
"#{@name} #{n}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
Feature: Manage <%= plural_name %>
|
2
|
+
In order to [goal]
|
3
|
+
[stakeholder]
|
4
|
+
wants [behaviour]
|
5
|
+
|
6
|
+
Scenario: Register new <%= singular_name %>
|
7
|
+
Given I am on the new <%= singular_name %> page
|
8
|
+
<% keyword = 'When' -%>
|
9
|
+
<% named_args.each do |arg| -%>
|
10
|
+
<% if arg.type == 'boolean' -%>
|
11
|
+
<%= keyword %> I uncheck "<%= arg.name.humanize %>"
|
12
|
+
<% else -%>
|
13
|
+
<%= keyword %> I fill in "<%= arg.name.humanize %>" with "<%= arg.value(1) %>"
|
14
|
+
<% end -%>
|
15
|
+
<% keyword = 'And' -%>
|
16
|
+
<% end -%>
|
17
|
+
And I press "Create"
|
18
|
+
<% keyword = 'Then' -%>
|
19
|
+
<% named_args.each do |arg| -%>
|
20
|
+
<%= keyword %> I should see "<%= arg.value(1) %>"
|
21
|
+
<% keyword = 'And' -%>
|
22
|
+
<% end -%>
|
23
|
+
|
24
|
+
<% if IO.read('features/support/env.rb') =~ /capybara/n -%>
|
25
|
+
# Rails generates Delete links that use Javascript to pop up a confirmation
|
26
|
+
# dialog and then do a HTTP POST request (emulated DELETE request).
|
27
|
+
#
|
28
|
+
# Capybara must use Culerity/Celerity or Selenium2 (webdriver) when pages rely
|
29
|
+
# on Javascript events. Only Culerity/Celerity supports clicking on confirmation
|
30
|
+
# dialogs.
|
31
|
+
#
|
32
|
+
# Since Culerity/Celerity and Selenium2 has some overhead, Cucumber-Rails will
|
33
|
+
# detect the presence of Javascript behind Delete links and issue a DELETE request
|
34
|
+
# instead of a GET request.
|
35
|
+
#
|
36
|
+
# You can turn this emulation off by tagging your scenario with @no-js-emulation.
|
37
|
+
# Turning on browser testing with @selenium, @culerity, @celerity or @javascript
|
38
|
+
# will also turn off the emulation. (See the Capybara documentation for
|
39
|
+
# details about those tags). If any of the browser tags are present, Cucumber-Rails
|
40
|
+
# will also turn off transactions and clean the database with DatabaseCleaner
|
41
|
+
# after the scenario has finished. This is to prevent data from leaking into
|
42
|
+
# the next scenario.
|
43
|
+
#
|
44
|
+
# Another way to avoid Cucumber-Rails' javascript emulation without using any
|
45
|
+
# of the tags above is to modify your views to use <button> instead. You can
|
46
|
+
# see how in http://github.com/jnicklas/capybara/issues#issue/12
|
47
|
+
#
|
48
|
+
<% if options[:capybara] -%>
|
49
|
+
@<%= options[:capybara] %>
|
50
|
+
<% end -%>
|
51
|
+
<% end -%>
|
52
|
+
Scenario: Delete <%= singular_name %>
|
53
|
+
Given the following <%= plural_name %>:
|
54
|
+
|<%= named_args.map(&:name).join('|') %>|
|
55
|
+
<% (1..4).each do |n| -%>
|
56
|
+
|<%= named_args.map{|arg| arg.value(n)}.join('|') %>|
|
57
|
+
<% end -%>
|
58
|
+
When I delete the 3rd <%= singular_name %>
|
59
|
+
Then I should see the following <%= plural_name %>:
|
60
|
+
|<%= named_args.map{|arg| arg.name.humanize}.join('|') %>|
|
61
|
+
<% [1,2,4].each do |n| -%>
|
62
|
+
|<%= named_args.map{|arg| arg.value(n)}.join('|') %>|
|
63
|
+
<% end -%>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Given /^the following <%= plural_name %>:$/ do |<%= plural_name %>|
|
2
|
+
<%= class_name %>.create!(<%= plural_name %>.hashes)
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I delete the (\d+)(?:st|nd|rd|th) <%= singular_name %>$/ do |pos|
|
6
|
+
visit <%= plural_name %>_path
|
7
|
+
within("table tr:nth-child(#{pos.to_i+1})") do
|
8
|
+
click_link "Destroy"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
Then /^I should see the following <%= plural_name %>:$/ do |expected_<%= plural_name %>_table|
|
13
|
+
expected_<%= plural_name %>_table.diff!(tableish('table tr', 'td,th'))
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Description:
|
2
|
+
Sets up Cucumber in your Rails project. After running this generator you will
|
3
|
+
get a new rake task called features.
|
4
|
+
|
5
|
+
This also generates the necessary files in the features directory.
|
6
|
+
|
7
|
+
Also see the cucumber:feature generator.
|
8
|
+
|
9
|
+
Examples:
|
10
|
+
`rails generate cucumber:install`
|
11
|
+
|
12
|
+
`rails generate cucumber:install --help`
|
13
|
+
|
14
|
+
You can also provide a language argument for localized web_steps:
|
15
|
+
`rails generate cucumber:install de`
|