spinach 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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