spinach 0.1.5.2 → 0.1.5.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -153,10 +153,14 @@ Full hook documentation is here:
153
153
  [Spinach's hook documentation on rubydoc](http://rubydoc.info/github/codegram/spinach/master/Spinach/Hooks)
154
154
 
155
155
 
156
- ## Wanna use it with Rails?
156
+ ## Wanna use it with Rails 3?
157
157
 
158
158
  Use [spinach-rails](http://github.com/codegram/spinach-rails)
159
159
 
160
+ ## Other rack-based frameworks
161
+
162
+ Check out our [spinach-sinatra demo](https://github.com/codegram/spinach-sinatra-demo)
163
+
160
164
  ## Contributing
161
165
 
162
166
  You can easily contribute to Spinach. Its codebase is simple and
data/bin/spinach CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ require "bundler/setup" rescue nil
2
3
 
3
4
  begin
4
5
  require 'spinach'
@@ -1,27 +1,4 @@
1
1
  module Spinach
2
- # This class represents the exception raised when Spinach can't find a class
3
- # for a feature.
4
- #
5
- class FeatureStepsNotFoundException < StandardError
6
- # @param [Array] options
7
- # An array consisting of the missing class and the feature.
8
- #
9
- # @api pulic
10
- def initialize(options)
11
- @missing_class, @feature = options
12
- end
13
-
14
- # @return [String]
15
- # A custom message when feature steps aren't found.
16
- #
17
- # @api public
18
- def message
19
- "Could not find steps for `#{@feature}` feature"
20
- end
21
-
22
- attr_reader :missing_class
23
- end
24
-
25
2
  # This class represents the exception raised when Spinach can't find a step
26
3
  # for a {FeatureSteps}.
27
4
  #
@@ -15,6 +15,7 @@ module Spinach
15
15
  def generate
16
16
  result = StringIO.new
17
17
  result.puts "#{@data['keyword']} '#{Spinach::Support.escape_single_commas @data['name']}' do"
18
+ result.puts " raise 'step not implemented'"
18
19
  result.puts "end"
19
20
  result.string
20
21
  end
@@ -125,10 +125,9 @@ module Spinach
125
125
  # @param [Spinach::FeatureNotFoundException] exception
126
126
  # the related exception
127
127
  #
128
- def on_feature_not_found(feature, exception)
129
- lines = "#{exception.message}\n"
130
-
128
+ def on_feature_not_found(feature)
131
129
  generator = Generators::FeatureGenerator.new(feature)
130
+ lines = "Could not find steps for `#{feature['name']}` feature\n\n"
132
131
  lines << "\nPlease create the file #{generator.filename} at #{generator.path}, with:\n\n"
133
132
 
134
133
  lines << generator.generate
@@ -53,20 +53,19 @@ module Spinach
53
53
  # @api public
54
54
  def run
55
55
  Spinach.hooks.run_before_feature data
56
-
57
- scenarios.each do |scenario|
58
- if !@scenario_line || scenario['line'].to_s == @scenario_line
59
- success = ScenarioRunner.new(feature_name, scenario).run
60
- @failed = true unless success
56
+ if Spinach.find_feature_steps(feature_name)
57
+ scenarios.each do |scenario|
58
+ if !@scenario_line || scenario['line'].to_s == @scenario_line
59
+ success = ScenarioRunner.new(feature_name, scenario).run
60
+ @failed = true unless success
61
+ end
61
62
  end
63
+ else
64
+ Spinach.hooks.run_on_undefined_feature data
65
+ @failed = true
62
66
  end
63
-
64
- rescue Spinach::FeatureStepsNotFoundException => e
65
- Spinach.hooks.run_on_undefined_feature data, e
66
- @failed = true
67
- ensure
68
67
  Spinach.hooks.run_after_feature data
69
- return !@failed
68
+ !@failed
70
69
  end
71
70
  end
72
71
  end
@@ -40,8 +40,6 @@ module Spinach
40
40
  begin
41
41
  step_location = feature_steps.execute_step(step['name'])
42
42
  Spinach.hooks.run_on_successful_step step, step_location
43
- rescue Spinach::FeatureStepsNotFoundException => e
44
- raise e
45
43
  rescue *Spinach.config[:failure_exceptions] => e
46
44
  @exception = e
47
45
  Spinach.hooks.run_on_failed_step step, @exception, step_location
@@ -1,4 +1,4 @@
1
1
  module Spinach
2
2
  # Spinach version.
3
- VERSION = "0.1.5.2"
3
+ VERSION = "0.1.5.3"
4
4
  end
data/lib/spinach.rb CHANGED
@@ -64,6 +64,6 @@ module Spinach
64
64
  feature_steps.detect do |feature|
65
65
  feature.feature_name.to_s == name.to_s ||
66
66
  feature.name == klass
67
- end || raise(Spinach::FeatureStepsNotFoundException, [klass, name])
67
+ end
68
68
  end
69
69
  end
@@ -15,6 +15,7 @@ describe Spinach::FeatureSteps::Capybara do
15
15
 
16
16
  @feature = Class.new(Spinach::FeatureSteps) do
17
17
  include Spinach::FeatureSteps::Capybara
18
+ feature 'A test feature'
18
19
  Given 'Hello' do
19
20
  end
20
21
  Then 'Goodbye' do
@@ -75,6 +75,9 @@ module Spinach::Generators
75
75
  klass = eval(result)
76
76
  feature_runner = Spinach::Runner::FeatureRunner.new(stub_everything)
77
77
  feature_runner.stubs(data: data)
78
+ error_count = 0
79
+ CheezburgerCanIHas.any_instance.
80
+ expects(:raise).with("step not implemented").times(6).returns(nil)
78
81
  feature_runner.run.must_equal true
79
82
  end
80
83
  end
@@ -208,33 +208,48 @@ describe Spinach::Reporter::Stdout do
208
208
  end
209
209
 
210
210
  describe '#full_error' do
211
- before do
212
- @reporter.expects(:report_exception).with(exception).returns('Exception backtrace')
213
- end
211
+ describe "when dealing with general errors" do
212
+ before do
213
+ @reporter.expects(:report_exception).with(exception).returns('Exception backtrace')
214
+ end
214
215
 
215
- it 'returns the exception data' do
216
- exception.expects(:backtrace).returns(['first backtrace line'])
217
- output = @reporter.full_error(error)
216
+ it 'returns the exception data' do
217
+ exception.expects(:backtrace).returns(['first backtrace line'])
218
+ output = @reporter.full_error(error)
218
219
 
219
- output.must_include 'Exception backtrace'
220
- end
220
+ output.must_include 'Exception backtrace'
221
+ end
221
222
 
222
- it 'returns the first backtrace line' do
223
- exception.expects(:backtrace).returns(['first backtrace line'])
224
- output = @reporter.full_error(error)
223
+ it 'returns the first backtrace line' do
224
+ exception.expects(:backtrace).returns(['first backtrace line'])
225
+ output = @reporter.full_error(error)
225
226
 
226
- output.must_include 'first backtrace line'
227
- end
227
+ output.must_include 'first backtrace line'
228
+ end
228
229
 
229
- describe 'when the user wants to print the full backtrace' do
230
- it 'prints the full backtrace' do
231
- @reporter.stubs(:options).returns({backtrace: true})
232
- exception.expects(:backtrace).returns(['first backtrace line', 'second backtrace line'])
230
+ describe 'when the user wants to print the full backtrace' do
231
+ it 'prints the full backtrace' do
232
+ @reporter.stubs(:options).returns({backtrace: true})
233
+ exception.expects(:backtrace).returns(['first backtrace line', 'second backtrace line'])
233
234
 
234
- output = @reporter.full_error(error)
235
+ output = @reporter.full_error(error)
235
236
 
236
- output.must_include 'first backtrace line'
237
- output.must_include 'second backtrace line'
237
+ output.must_include 'first backtrace line'
238
+ output.must_include 'second backtrace line'
239
+ end
240
+ end
241
+ end
242
+
243
+ describe "when it's a step not defined exception" do
244
+ it "returns a suggestion" do
245
+ @exception = Spinach::StepNotDefinedException.new("foo")
246
+ @error = [{'name' => 'My feature'},
247
+ {'name' => 'A scenario'},
248
+ {'keyword' => 'Given', 'name' => 'foo'},
249
+ @exception]
250
+ output = @reporter.full_error(@error)
251
+ output.must_include "Given"
252
+ output.must_include "foo"
238
253
  end
239
254
  end
240
255
  end
@@ -171,16 +171,12 @@ describe Spinach::Reporter::Stdout do
171
171
  'name' => 'This feature does not exist'
172
172
  }
173
173
  Spinach.config.stubs(:step_definitions_path).returns('my/path')
174
- exception = stub(
175
- message: "This is a \nmultiple line error message",
176
- missing_class: "ThisFeatureDoesNotExist"
177
- )
178
- @reporter.on_feature_not_found(@feature, exception)
174
+ @reporter.on_feature_not_found(@feature)
179
175
  end
180
176
  it "outputs a message" do
177
+ @out.string.must_include "This feature does not exist"
181
178
  @out.string.must_include "this_feature_does_not_exist.rb"
182
- @out.string.must_include "This is a"
183
- @out.string.must_include "multiple line error message"
179
+ @out.string.must_include "ThisFeatureDoesNotExist"
184
180
  @reporter.undefined_features.must_include @feature
185
181
  end
186
182
 
@@ -45,6 +45,7 @@ describe Spinach::Runner::FeatureRunner do
45
45
  end
46
46
 
47
47
  it 'calls the steps as expected' do
48
+ Spinach.expects(:find_feature_steps).returns(true)
48
49
  seq = sequence('feature')
49
50
  3.times do
50
51
  Spinach::Runner::ScenarioRunner.
@@ -56,18 +57,21 @@ describe Spinach::Runner::FeatureRunner do
56
57
  end
57
58
 
58
59
  it 'returns true if the execution succeeds' do
60
+ Spinach.expects(:find_feature_steps).returns(true)
59
61
  Spinach::Runner::ScenarioRunner.any_instance.
60
62
  expects(run: true).times(3)
61
63
  subject.run.must_equal true
62
64
  end
63
65
 
64
66
  it 'returns false if the execution fails' do
67
+ Spinach.expects(:find_feature_steps).returns(true)
65
68
  Spinach::Runner::ScenarioRunner.any_instance.
66
69
  expects(run: false).times(3)
67
70
  subject.run.must_equal false
68
71
  end
69
72
 
70
73
  it 'calls only the given scenario' do
74
+ Spinach.expects(:find_feature_steps).returns(true)
71
75
  @filename = 'feature/a_cool_feature.feature:12'
72
76
  @feature = Spinach::Runner::FeatureRunner.new(@filename)
73
77
  @feature.stubs(data: {
@@ -82,16 +86,15 @@ describe Spinach::Runner::FeatureRunner do
82
86
  end
83
87
 
84
88
  it "fires a hook if the feature is not defined" do
85
- data = mock
86
- exception = Spinach::FeatureStepsNotFoundException.new([anything, anything])
87
- subject.stubs(:scenarios).raises(exception)
89
+ data = stub_everything
90
+ Spinach.expects(:find_feature_steps).returns(false)
88
91
  subject.stubs(:data).returns(data)
89
92
  not_found_called = false
90
- Spinach.hooks.on_undefined_feature do |data, exception|
91
- not_found_called = [data, exception]
93
+ Spinach.hooks.on_undefined_feature do |data|
94
+ not_found_called = data
92
95
  end
93
96
  subject.run
94
- not_found_called.must_equal [data, exception]
97
+ not_found_called.must_equal data
95
98
  end
96
99
  end
97
100
  end
@@ -50,6 +50,7 @@ describe Spinach::Runner::ScenarioRunner do
50
50
 
51
51
  describe 'when throwing exceptions' do
52
52
  it 'rescues a MiniTest::Assertion' do
53
+ Spinach.config[:failure_exceptions] << MiniTest::Assertion
53
54
  feature_steps.expects(:execute_step).raises(MiniTest::Assertion)
54
55
  Spinach.hooks.expects("run_before_scenario").with(has_value("A cool scenario"))
55
56
  Spinach.hooks.expects("run_after_scenario").with(has_value("A cool scenario"))
data/test/spinach_test.rb CHANGED
@@ -6,7 +6,7 @@ describe Spinach do
6
6
  @feature_steps2 = OpenStruct.new(feature_name: 'Slip management')
7
7
  @feature_steps3 = OpenStruct.new(feature_name: 'File attachments')
8
8
  @feature_steps4 = OpenStruct.new(name: 'UserSendsAMessage')
9
- [@feature_steps1, @feature_steps2,
9
+ [@feature_steps1, @feature_steps2,
10
10
  @feature_steps3, @feature_steps4].each do |feature|
11
11
  Spinach.feature_steps << feature
12
12
  end
@@ -41,10 +41,8 @@ describe Spinach do
41
41
  Spinach.find_feature_steps('User sends a message').must_equal @feature_steps4
42
42
  end
43
43
 
44
- it 'raises when it cannot find the class' do
45
- exception = proc {
46
- Spinach.find_feature_steps('This feature does not exist')
47
- }.must_raise Spinach::FeatureStepsNotFoundException
44
+ it 'returns nil when it cannot find the class' do
45
+ Spinach.find_feature_steps('This feature does not exist').must_equal nil
48
46
  end
49
47
  end
50
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spinach
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5.2
4
+ version: 0.1.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2011-10-21 00:00:00.000000000Z
15
+ date: 2011-10-22 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: gherkin
19
- requirement: &2165502840 !ruby/object:Gem::Requirement
19
+ requirement: &70344997199800 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '0'
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *2165502840
27
+ version_requirements: *70344997199800
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: colorize
30
- requirement: &2165502420 !ruby/object:Gem::Requirement
30
+ requirement: &70344997199380 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *2165502420
38
+ version_requirements: *70344997199380
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: rake
41
- requirement: &2165502000 !ruby/object:Gem::Requirement
41
+ requirement: &70344997198960 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :development
48
48
  prerelease: false
49
- version_requirements: *2165502000
49
+ version_requirements: *70344997198960
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: mocha
52
- requirement: &2165501580 !ruby/object:Gem::Requirement
52
+ requirement: &70344997198540 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '0'
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *2165501580
60
+ version_requirements: *70344997198540
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: sinatra
63
- requirement: &2165501160 !ruby/object:Gem::Requirement
63
+ requirement: &70344997198120 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *2165501160
71
+ version_requirements: *70344997198120
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: capybara
74
- requirement: &2165500740 !ruby/object:Gem::Requirement
74
+ requirement: &70344997197700 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *2165500740
82
+ version_requirements: *70344997197700
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: aruba
85
- requirement: &2165500320 !ruby/object:Gem::Requirement
85
+ requirement: &70344997197280 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *2165500320
93
+ version_requirements: *70344997197280
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: pry
96
- requirement: &2165499900 !ruby/object:Gem::Requirement
96
+ requirement: &70344997196860 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *2165499900
104
+ version_requirements: *70344997196860
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: simplecov
107
- requirement: &2165499480 !ruby/object:Gem::Requirement
107
+ requirement: &70344997196440 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,10 +112,10 @@ dependencies:
112
112
  version: '0'
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *2165499480
115
+ version_requirements: *70344997196440
116
116
  - !ruby/object:Gem::Dependency
117
117
  name: rspec
118
- requirement: &2165499060 !ruby/object:Gem::Requirement
118
+ requirement: &70344997196020 !ruby/object:Gem::Requirement
119
119
  none: false
120
120
  requirements:
121
121
  - - ! '>='
@@ -123,10 +123,10 @@ dependencies:
123
123
  version: '0'
124
124
  type: :development
125
125
  prerelease: false
126
- version_requirements: *2165499060
126
+ version_requirements: *70344997196020
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: fakefs
129
- requirement: &2165498620 !ruby/object:Gem::Requirement
129
+ requirement: &70344997224000 !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
132
132
  - - ! '>='
@@ -134,10 +134,10 @@ dependencies:
134
134
  version: '0'
135
135
  type: :development
136
136
  prerelease: false
137
- version_requirements: *2165498620
137
+ version_requirements: *70344997224000
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: minitest
140
- requirement: &2165498200 !ruby/object:Gem::Requirement
140
+ requirement: &70344997223580 !ruby/object:Gem::Requirement
141
141
  none: false
142
142
  requirements:
143
143
  - - ! '>='
@@ -145,10 +145,10 @@ dependencies:
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
- version_requirements: *2165498200
148
+ version_requirements: *70344997223580
149
149
  - !ruby/object:Gem::Dependency
150
150
  name: turn
151
- requirement: &2165497760 !ruby/object:Gem::Requirement
151
+ requirement: &70344997223160 !ruby/object:Gem::Requirement
152
152
  none: false
153
153
  requirements:
154
154
  - - ! '>='
@@ -156,7 +156,7 @@ dependencies:
156
156
  version: '0'
157
157
  type: :development
158
158
  prerelease: false
159
- version_requirements: *2165497760
159
+ version_requirements: *70344997223160
160
160
  description: Spinach is a BDD framework on top of gherkin
161
161
  email:
162
162
  - info@codegram.com
@@ -222,7 +222,6 @@ files:
222
222
  - lib/spinach/support.rb
223
223
  - lib/spinach/version.rb
224
224
  - spinach.gemspec
225
- - test/exceptions_test.rb
226
225
  - test/spinach/capybara_test.rb
227
226
  - test/spinach/cli_test.rb
228
227
  - test/spinach/config_test.rb
@@ -256,18 +255,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
256
255
  - - ! '>='
257
256
  - !ruby/object:Gem::Version
258
257
  version: '0'
259
- segments:
260
- - 0
261
- hash: -635878256505431250
262
258
  required_rubygems_version: !ruby/object:Gem::Requirement
263
259
  none: false
264
260
  requirements:
265
261
  - - ! '>='
266
262
  - !ruby/object:Gem::Version
267
263
  version: '0'
268
- segments:
269
- - 0
270
- hash: -635878256505431250
271
264
  requirements: []
272
265
  rubyforge_project:
273
266
  rubygems_version: 1.8.6
@@ -294,7 +287,6 @@ test_files:
294
287
  - features/support/env.rb
295
288
  - features/support/error_reporting.rb
296
289
  - features/support/spinach_runner.rb
297
- - test/exceptions_test.rb
298
290
  - test/spinach/capybara_test.rb
299
291
  - test/spinach/cli_test.rb
300
292
  - test/spinach/config_test.rb
@@ -1,13 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- describe Spinach::FeatureStepsNotFoundException do
4
- subject do
5
- Spinach::FeatureStepsNotFoundException.new(['ThisFeatureDoesNotExist', 'This feature does not exist'])
6
- end
7
-
8
- describe 'message' do
9
- it 'tells the user that the steps could not be found' do
10
- subject.message.must_include 'Could not find steps for `This feature does not exist` feature'
11
- end
12
- end
13
- end