spinach 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,91 +2,53 @@ require_relative '../test_helper'
2
2
 
3
3
  describe Spinach::Runner do
4
4
  before do
5
- Spinach.reset_features
6
- @feature = Class.new(Spinach::Feature) do
7
- feature "A new feature"
8
- When "I say hello" do
9
- @when_called = true
5
+ @filenames =
6
+ %w{features/cool_feature.feature features/great_feature.feature}
7
+
8
+ @runner = Spinach::Runner.new(@filenames)
9
+ end
10
+ describe "#initialize" do
11
+ it "sets the filenames" do
12
+ @runner.filenames.must_equal @filenames
13
+ end
14
+ describe "step_definitions_path" do
15
+ it "sets a default" do
16
+ @runner.step_definitions_path.must_be_kind_of String
10
17
  end
11
- Then "you say goodbye" do
12
- @then_called = true
13
- true.must_equal false
18
+ it "can be overriden" do
19
+ @runner = Spinach::Runner.new(
20
+ @filename, step_definitions_path: 'spinach/step_definitions'
21
+ )
22
+ @runner.step_definitions_path.must_equal 'spinach/step_definitions'
14
23
  end
15
- attr_accessor :when_called, :then_called
16
24
  end
17
- data = {
18
- 'name' => "A new feature",
19
- 'elements' => [
20
- {'name' => 'First scenario', 'steps' => [
21
- {'keyword' => 'When ', 'name' => "I say hello"},
22
- {'keyword' => 'Then ', 'name' => "you say goodbye"}]
23
- }
24
- ]
25
- }
26
- @runner = Spinach::Runner.new(data)
27
- end
28
- describe "#feature" do
29
- it "returns a Spinach feature" do
30
- @runner.feature.ancestors.must_include @feature
25
+ describe "support_path" do
26
+ it "sets a default" do
27
+ @runner.support_path.must_be_kind_of String
28
+ end
29
+ it "can be overriden" do
30
+ @runner = Spinach::Runner.new(
31
+ @filename, support_path: 'spinach/environment'
32
+ )
33
+ @runner.support_path.must_equal 'spinach/environment'
34
+ end
31
35
  end
32
36
  end
33
- describe "#scenarios" do
34
- it "should return the scenarios" do
35
- @runner.scenarios.must_equal [
36
- {'name' => 'First scenario', 'steps' => [
37
- {'keyword' => 'When ', 'name' => "I say hello"},
38
- {'keyword' => 'Then ', 'name' => "you say goodbye"} ]
39
- }
40
- ]
37
+ describe "#reporter" do
38
+ it "returns a default reporter" do
39
+ @runner.reporter.wont_equal nil
41
40
  end
42
41
  end
43
42
  describe "#run" do
44
- it "should hook into the reporter" do
45
- reporter = stub_everything
46
- @runner.stubs(reporter: reporter)
47
- reporter.expects(:feature).with("A new feature")
48
- reporter.expects(:end).once
49
- @runner.run
50
- end
51
- end
52
- describe Spinach::Runner::Scenario do
53
- before do
54
- @data = {'name' => 'First scenario', 'steps' => [
55
- {'keyword' => 'When ', 'name' => "I say hello"},
56
- {'keyword' => 'Then ', 'name' => "you say goodbye"}]
57
- }
58
- @reporter = stub_everything
59
- @runner = stub(reporter: @reporter, feature: @feature)
60
- @scenario = Spinach::Runner::Scenario.new(@runner, @data)
61
- end
62
- it "should call every step on the feature" do
63
- @scenario.run
64
- @scenario.feature.when_called.must_equal true
65
- @scenario.feature.then_called.must_equal true
66
- end
67
- it "calls the appropiate methods of the reporter" do
68
- @reporter.expects(:scenario).with("First scenario")
69
- @reporter.expects(:step).once.with("When I say hello", :success)
70
- @reporter.expects(:step).once.with("Then you say goodbye", :failure)
71
- @scenario.run
72
- end
73
- it "stops the run when finds an error" do
74
- @feature = Class.new(Spinach::Feature) do
75
- feature "A new feature"
76
- When "I say hello" do
77
- @when_called = true
78
- true.must_equal false
79
- end
80
- Then "you say goodbye" do
81
- @then_called = true
82
- end
83
- attr_accessor :when_called, :then_called
43
+ it "instantiates a new Feature and runs it with every file" do
44
+ feature = stub(run: nil)
45
+ @runner.stubs(reporter: stub_everything)
46
+ @filenames.each do |filename|
47
+ Spinach::Runner::Feature.expects(:new).
48
+ with(filename, anything).
49
+ returns(feature)
84
50
  end
85
- @runner.stubs(feature: @feature)
86
- @scenario = Spinach::Runner::Scenario.new(@runner, @data)
87
- @scenario.run
88
- @scenario.feature.when_called.must_equal true
89
- @scenario.feature.then_called.wont_equal true
51
+ @runner.run
90
52
  end
91
53
  end
92
54
  end
@@ -0,0 +1,33 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Spinach::Support do
4
+ describe '#camelize' do
5
+ it 'returns an empty string with nil values' do
6
+ Spinach::Support.camelize(nil).must_equal ''
7
+ end
8
+
9
+ it 'downcases the given value' do
10
+ ActiveSupport::Inflector.expects(:camelize).with('value').returns('value')
11
+
12
+ Spinach::Support.camelize('VALUE').must_equal 'value'
13
+ end
14
+
15
+ it 'squeezes the spaces for the given value' do
16
+ ActiveSupport::Inflector.expects(:camelize).with('feature_name').returns('FeatureName')
17
+
18
+ Spinach::Support.camelize('feature name').must_equal 'FeatureName'
19
+ end
20
+
21
+ it 'strips the given value' do
22
+ ActiveSupport::Inflector.expects(:camelize).with('value').returns('value')
23
+
24
+ Spinach::Support.camelize(' value ').must_equal 'value'
25
+ end
26
+
27
+ it 'strips the given value' do
28
+ ActiveSupport::Inflector.expects(:camelize).with('feature_name').returns('FeatureName')
29
+
30
+ Spinach::Support.camelize('feature name').must_equal 'FeatureName'
31
+ end
32
+ end
33
+ end
data/test/spinach_test.rb CHANGED
@@ -5,10 +5,12 @@ describe Spinach do
5
5
  @feature1 = OpenStruct.new(feature_name: "User authentication")
6
6
  @feature2 = OpenStruct.new(feature_name: "Slip management")
7
7
  @feature3 = OpenStruct.new(feature_name: "File attachments")
8
- [@feature1, @feature2, @feature3].each do |feature|
8
+ @feature4 = OpenStruct.new(name: "UserSendsAMessage")
9
+ [@feature1, @feature2, @feature3, @feature4].each do |feature|
9
10
  Spinach.features << feature
10
11
  end
11
12
  end
13
+
12
14
  describe "#features" do
13
15
  it "returns all the loaded features" do
14
16
  Spinach.features.must_include @feature1
@@ -16,6 +18,7 @@ describe Spinach do
16
18
  Spinach.features.must_include @feature3
17
19
  end
18
20
  end
21
+
19
22
  describe "#reset_features" do
20
23
  it "resets the features to a pristine state" do
21
24
  Spinach.reset_features
@@ -24,11 +27,36 @@ describe Spinach do
24
27
  end
25
28
  end
26
29
  end
30
+
27
31
  describe "#find_feature" do
28
32
  it "finds a feature by name" do
29
33
  Spinach.find_feature("User authentication").must_equal @feature1
30
34
  Spinach.find_feature("Slip management").must_equal @feature2
31
35
  Spinach.find_feature("File attachments").must_equal @feature3
32
36
  end
37
+
38
+ describe "when a feature class does no set a feature_name" do
39
+ it 'guesses the feature class from the feature name' do
40
+ Spinach.find_feature('User sends a message').must_equal @feature4
41
+ end
42
+
43
+ it 'raises when it cannot find the class' do
44
+ exception = proc {
45
+ Spinach.find_feature('This feature does not exist')
46
+ }.must_raise Spinach::FeatureNotFoundException
47
+
48
+ exception.message.must_equal 'Could not find class for `This feature does not exist` feature. Please create a ThisFeatureDoesNotExist.rb file at features/steps'
49
+ end
50
+
51
+ it 'uses Spinach.config[:step_definitions_path] to tell the user where to wirte the steps' do
52
+ Spinach.config.stubs(:step_definitions_path).returns('my/path/')
53
+
54
+ exception = proc {
55
+ Spinach.find_feature('This feature does not exist')
56
+ }.must_raise Spinach::FeatureNotFoundException
57
+
58
+ exception.message.must_match %r{my/path}
59
+ end
60
+ end
33
61
  end
34
62
  end
metadata CHANGED
@@ -1,21 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spinach
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Josep Jaume Rey
9
9
  - Josep M. Bach
10
10
  - Oriol Gual
11
+ - Marc Divins Castellvi
11
12
  autorequire:
12
13
  bindir: bin
13
14
  cert_chain: []
14
- date: 2011-09-26 00:00:00.000000000Z
15
+ date: 2011-09-30 00:00:00.000000000Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: gherkin
18
- requirement: &70223546997620 !ruby/object:Gem::Requirement
19
+ requirement: &70215568398460 !ruby/object:Gem::Requirement
19
20
  none: false
20
21
  requirements:
21
22
  - - ! '>='
@@ -23,10 +24,10 @@ dependencies:
23
24
  version: '0'
24
25
  type: :runtime
25
26
  prerelease: false
26
- version_requirements: *70223546997620
27
+ version_requirements: *70215568398460
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: minitest
29
- requirement: &70223546997200 !ruby/object:Gem::Requirement
30
+ requirement: &70215568396980 !ruby/object:Gem::Requirement
30
31
  none: false
31
32
  requirements:
32
33
  - - ! '>='
@@ -34,10 +35,10 @@ dependencies:
34
35
  version: '0'
35
36
  type: :runtime
36
37
  prerelease: false
37
- version_requirements: *70223546997200
38
+ version_requirements: *70215568396980
38
39
  - !ruby/object:Gem::Dependency
39
40
  name: colorize
40
- requirement: &70223546996780 !ruby/object:Gem::Requirement
41
+ requirement: &70215568395140 !ruby/object:Gem::Requirement
41
42
  none: false
42
43
  requirements:
43
44
  - - ! '>='
@@ -45,10 +46,21 @@ dependencies:
45
46
  version: '0'
46
47
  type: :runtime
47
48
  prerelease: false
48
- version_requirements: *70223546996780
49
+ version_requirements: *70215568395140
50
+ - !ruby/object:Gem::Dependency
51
+ name: activesupport
52
+ requirement: &70215568393640 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: *70215568393640
49
61
  - !ruby/object:Gem::Dependency
50
62
  name: purdytest
51
- requirement: &70223546996360 !ruby/object:Gem::Requirement
63
+ requirement: &70215568391860 !ruby/object:Gem::Requirement
52
64
  none: false
53
65
  requirements:
54
66
  - - ! '>='
@@ -56,10 +68,10 @@ dependencies:
56
68
  version: '0'
57
69
  type: :development
58
70
  prerelease: false
59
- version_requirements: *70223546996360
71
+ version_requirements: *70215568391860
60
72
  - !ruby/object:Gem::Dependency
61
73
  name: rake
62
- requirement: &70223546995940 !ruby/object:Gem::Requirement
74
+ requirement: &70215568390360 !ruby/object:Gem::Requirement
63
75
  none: false
64
76
  requirements:
65
77
  - - ! '>='
@@ -67,10 +79,10 @@ dependencies:
67
79
  version: '0'
68
80
  type: :development
69
81
  prerelease: false
70
- version_requirements: *70223546995940
82
+ version_requirements: *70215568390360
71
83
  - !ruby/object:Gem::Dependency
72
84
  name: mocha
73
- requirement: &70223546995520 !ruby/object:Gem::Requirement
85
+ requirement: &70215568389220 !ruby/object:Gem::Requirement
74
86
  none: false
75
87
  requirements:
76
88
  - - ! '>='
@@ -78,10 +90,10 @@ dependencies:
78
90
  version: '0'
79
91
  type: :development
80
92
  prerelease: false
81
- version_requirements: *70223546995520
93
+ version_requirements: *70215568389220
82
94
  - !ruby/object:Gem::Dependency
83
95
  name: sinatra
84
- requirement: &70223546995100 !ruby/object:Gem::Requirement
96
+ requirement: &70215568388420 !ruby/object:Gem::Requirement
85
97
  none: false
86
98
  requirements:
87
99
  - - ! '>='
@@ -89,10 +101,32 @@ dependencies:
89
101
  version: '0'
90
102
  type: :development
91
103
  prerelease: false
92
- version_requirements: *70223546995100
104
+ version_requirements: *70215568388420
93
105
  - !ruby/object:Gem::Dependency
94
106
  name: capybara
95
- requirement: &70223546994680 !ruby/object:Gem::Requirement
107
+ requirement: &70215568387460 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: *70215568387460
116
+ - !ruby/object:Gem::Dependency
117
+ name: aruba
118
+ requirement: &70215568386020 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: *70215568386020
127
+ - !ruby/object:Gem::Dependency
128
+ name: pry
129
+ requirement: &70215568384720 !ruby/object:Gem::Requirement
96
130
  none: false
97
131
  requirements:
98
132
  - - ! '>='
@@ -100,7 +134,7 @@ dependencies:
100
134
  version: '0'
101
135
  type: :development
102
136
  prerelease: false
103
- version_requirements: *70223546994680
137
+ version_requirements: *70215568384720
104
138
  description: Spinach is a BDD framework on top of gherkin
105
139
  email:
106
140
  - info@codegram.com
@@ -111,6 +145,7 @@ extra_rdoc_files: []
111
145
  files:
112
146
  - .gitignore
113
147
  - .rvmrc
148
+ - .travis.yml
114
149
  - Gemfile
115
150
  - Guardfile
116
151
  - Rakefile
@@ -119,14 +154,21 @@ files:
119
154
  - examples/steps/user_logs_in.rb
120
155
  - examples/user_logs_in.feature
121
156
  - examples/user_logs_in.rb
157
+ - features/feature_name_guessing.feature
158
+ - features/steps/feature_name_guessing.rb
122
159
  - lib/spinach.rb
123
160
  - lib/spinach/capybara.rb
124
161
  - lib/spinach/config.rb
125
162
  - lib/spinach/dsl.rb
163
+ - lib/spinach/exceptions.rb
126
164
  - lib/spinach/feature.rb
127
165
  - lib/spinach/parser.rb
128
166
  - lib/spinach/reporter.rb
167
+ - lib/spinach/reporter/stdout.rb
129
168
  - lib/spinach/runner.rb
169
+ - lib/spinach/runner/feature.rb
170
+ - lib/spinach/runner/scenario.rb
171
+ - lib/spinach/support.rb
130
172
  - lib/spinach/version.rb
131
173
  - spinach.gemspec
132
174
  - test/spinach/capybara_test.rb
@@ -134,8 +176,12 @@ files:
134
176
  - test/spinach/dsl_test.rb
135
177
  - test/spinach/feature_test.rb
136
178
  - test/spinach/parser_test.rb
179
+ - test/spinach/reporter/stdout_test.rb
137
180
  - test/spinach/reporter_test.rb
181
+ - test/spinach/runner/feature_test.rb
182
+ - test/spinach/runner/scenario_test.rb
138
183
  - test/spinach/runner_test.rb
184
+ - test/spinach/support_test.rb
139
185
  - test/spinach_test.rb
140
186
  - test/test_helper.rb
141
187
  homepage: http://github.com/codegram/spinach
@@ -158,17 +204,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
204
  version: '0'
159
205
  requirements: []
160
206
  rubyforge_project:
161
- rubygems_version: 1.8.6
207
+ rubygems_version: 1.8.10
162
208
  signing_key:
163
209
  specification_version: 3
164
210
  summary: Spinach is a BDD framework on top of gherkin
165
211
  test_files:
212
+ - features/feature_name_guessing.feature
213
+ - features/steps/feature_name_guessing.rb
166
214
  - test/spinach/capybara_test.rb
167
215
  - test/spinach/config_test.rb
168
216
  - test/spinach/dsl_test.rb
169
217
  - test/spinach/feature_test.rb
170
218
  - test/spinach/parser_test.rb
219
+ - test/spinach/reporter/stdout_test.rb
171
220
  - test/spinach/reporter_test.rb
221
+ - test/spinach/runner/feature_test.rb
222
+ - test/spinach/runner/scenario_test.rb
172
223
  - test/spinach/runner_test.rb
224
+ - test/spinach/support_test.rb
173
225
  - test/spinach_test.rb
174
226
  - test/test_helper.rb