spinach 0.0.5 → 0.0.6
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.
- data/.travis.yml +2 -2
- data/bin/spinach +1 -7
- data/features/error_reporting.feature +14 -0
- data/features/exit_status.feature +14 -0
- data/features/steps/error_reporting.rb +56 -0
- data/features/steps/exit_status.rb +50 -0
- data/features/steps/feature_name_guessing.rb +2 -9
- data/features/support/spinach_runner.rb +14 -0
- data/lib/spinach/cli.rb +67 -0
- data/lib/spinach/reporter/stdout.rb +26 -15
- data/lib/spinach/reporter.rb +4 -1
- data/lib/spinach/runner/feature.rb +4 -1
- data/lib/spinach/runner.rb +3 -2
- data/lib/spinach/version.rb +1 -1
- data/lib/spinach.rb +1 -0
- data/test/spinach/cli_test.rb +45 -0
- data/test/spinach/reporter/stdout_test.rb +27 -11
- data/test/spinach/runner/feature_test.rb +14 -0
- data/test/spinach/runner/scenario_test.rb +11 -4
- data/test/spinach/runner_test.rb +10 -3
- metadata +37 -24
data/.travis.yml
CHANGED
data/bin/spinach
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Error reporting
|
2
|
+
In order to receive a clear output and chase my errors
|
3
|
+
As a developer
|
4
|
+
I want spinach to give me a comprehensive error reporting
|
5
|
+
|
6
|
+
Scenario: Error reporting without backtrace
|
7
|
+
Given I have a feature with some errors
|
8
|
+
When I run "spinach"
|
9
|
+
Then I should see the error count along with their messages
|
10
|
+
|
11
|
+
Scenario: Error reporting with backtrace
|
12
|
+
Given I have a feature with some errors
|
13
|
+
When I run "spinach --backtrace"
|
14
|
+
Then I should see the error count along with their messages and backtrace
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Exit status
|
2
|
+
In order to receive a standard exit code
|
3
|
+
As a developer
|
4
|
+
I want spinach to return exit status properly
|
5
|
+
|
6
|
+
Scenario: It succeeds
|
7
|
+
Given I have a feature that has no error or failure
|
8
|
+
When I run it
|
9
|
+
Then the exit status should be 0
|
10
|
+
|
11
|
+
Scenario: It fails
|
12
|
+
Given I have a feature that has a failure
|
13
|
+
When I run it
|
14
|
+
Then the exit status should be 1
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Feature "Error reporting" do
|
2
|
+
include Integration::SpinachRunner
|
3
|
+
|
4
|
+
Given "I have a feature with some errors" do
|
5
|
+
write_file('features/feature_with_errors.feature',
|
6
|
+
'Feature: Feature with errors
|
7
|
+
|
8
|
+
Scenario: This scenario will fail
|
9
|
+
Given true is false
|
10
|
+
Then remove all the files in my hard drive
|
11
|
+
')
|
12
|
+
|
13
|
+
write_file('features/steps/error_feature.rb',
|
14
|
+
'Feature "Feature with errors" do
|
15
|
+
Given "true is false" do
|
16
|
+
true.must_equal false
|
17
|
+
end
|
18
|
+
|
19
|
+
Then "remove all the files in my hard drive" do
|
20
|
+
# joking!
|
21
|
+
end
|
22
|
+
end')
|
23
|
+
end
|
24
|
+
|
25
|
+
When 'I run "spinach"' do
|
26
|
+
run_feature 'features/feature_with_errors.feature'
|
27
|
+
end
|
28
|
+
|
29
|
+
When 'I run "spinach --backtrace"' do
|
30
|
+
run_feature 'features/feature_with_errors.feature', '--backtrace'
|
31
|
+
end
|
32
|
+
|
33
|
+
Then 'I should see the error count along with their messages' do
|
34
|
+
check_error_messages
|
35
|
+
all_stdout.wont_match /gems.*minitest.*assert_equal/
|
36
|
+
end
|
37
|
+
|
38
|
+
Then 'I should see the error count along with their messages and backtrace' do
|
39
|
+
check_error_messages
|
40
|
+
check_backtrace
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def check_error_messages
|
46
|
+
all_stdout.must_include "Error summary"
|
47
|
+
all_stdout.must_match /errors.*This scenario will fail.*line 4/
|
48
|
+
end
|
49
|
+
|
50
|
+
def check_backtrace
|
51
|
+
all_stdout.must_include "Error summary"
|
52
|
+
all_stdout.must_match /errors.*This scenario will fail.*line 4/
|
53
|
+
all_stdout.must_match /gems.*minitest.*assert_equal/
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'aruba/api'
|
2
|
+
|
3
|
+
Feature "Exit status" do
|
4
|
+
include Integration::SpinachRunner
|
5
|
+
|
6
|
+
Given "I have a feature that has no error or failure" do
|
7
|
+
write_file('features/success_feature.feature',
|
8
|
+
'Feature: A success feature
|
9
|
+
|
10
|
+
Scenario: This is scenario will succeed
|
11
|
+
Then I succeed
|
12
|
+
')
|
13
|
+
write_file('features/steps/success_feature.rb',
|
14
|
+
'Feature "A success feature" do
|
15
|
+
Then "I succeed" do
|
16
|
+
end
|
17
|
+
end')
|
18
|
+
@feature = "features/success_feature.feature"
|
19
|
+
end
|
20
|
+
|
21
|
+
Given "I have a feature that has a failure" do
|
22
|
+
write_file('features/failure_feature.feature',
|
23
|
+
'Feature: A failure feature
|
24
|
+
|
25
|
+
Scenario: This is scenario will fail
|
26
|
+
Then I fail
|
27
|
+
')
|
28
|
+
write_file('features/steps/failure_feature.rb',
|
29
|
+
'Feature "A failure feature" do
|
30
|
+
Then "I fail" do
|
31
|
+
true.must_equal false
|
32
|
+
end
|
33
|
+
end')
|
34
|
+
@feature = "features/failure_feature.feature"
|
35
|
+
end
|
36
|
+
|
37
|
+
When "I run it" do
|
38
|
+
run_feature @feature
|
39
|
+
all_stdout # Hack to get a correct exit status
|
40
|
+
end
|
41
|
+
|
42
|
+
Then "the exit status should be 0" do
|
43
|
+
last_exit_status.must_equal 0
|
44
|
+
end
|
45
|
+
|
46
|
+
Then "the exit status should be 1" do
|
47
|
+
last_exit_status.must_equal 1
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -1,7 +1,5 @@
|
|
1
|
-
require 'aruba/api'
|
2
|
-
|
3
1
|
Feature "Feature name guessing" do
|
4
|
-
include
|
2
|
+
include Integration::SpinachRunner
|
5
3
|
|
6
4
|
Given 'I am writing a feature called "My cool feature"' do
|
7
5
|
write_file('features/my_cool_feature.feature',
|
@@ -15,7 +13,7 @@ Feature "Feature name guessing" do
|
|
15
13
|
|
16
14
|
And 'I write a class named "MyCoolFeature"' do
|
17
15
|
write_file('features/steps/my_cool_feature.rb',
|
18
|
-
'
|
16
|
+
'class MyCoolFeature < Spinach::Feature
|
19
17
|
When "this is so meta" do
|
20
18
|
end
|
21
19
|
|
@@ -32,9 +30,4 @@ Feature "Feature name guessing" do
|
|
32
30
|
all_stderr.must_be_empty
|
33
31
|
end
|
34
32
|
|
35
|
-
private
|
36
|
-
|
37
|
-
def run_feature(command)
|
38
|
-
run "../../bin/spinach #{command}"
|
39
|
-
end
|
40
33
|
end
|
data/lib/spinach/cli.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Spinach
|
4
|
+
# The cli is a class responsible of handling all the command line interface
|
5
|
+
# logic
|
6
|
+
#
|
7
|
+
class Cli
|
8
|
+
# @param [Array<String>] arguments
|
9
|
+
# the command line arguments
|
10
|
+
def initialize(args = ARGV)
|
11
|
+
@args = args
|
12
|
+
end
|
13
|
+
|
14
|
+
# Runs all the feature
|
15
|
+
#
|
16
|
+
# @return [Boolean]
|
17
|
+
# the exit status - true for success, false for failure
|
18
|
+
def run
|
19
|
+
init_reporter
|
20
|
+
parse_options
|
21
|
+
features = if @args.any?
|
22
|
+
@args
|
23
|
+
else
|
24
|
+
Dir.glob(File.join 'features', '**', '*.feature')
|
25
|
+
end
|
26
|
+
Spinach::Runner.new(features).run
|
27
|
+
end
|
28
|
+
|
29
|
+
# Inits the reporter with a default one
|
30
|
+
def init_reporter
|
31
|
+
Spinach.config.default_reporter =
|
32
|
+
Spinach::Reporter::Stdout.new(options[:reporter])
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns a hash of options, separated by its type:
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# {
|
39
|
+
# reporter: { backtrace: true }
|
40
|
+
# }
|
41
|
+
#
|
42
|
+
# @return [Hash]
|
43
|
+
def options
|
44
|
+
@options ||= parse_options
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def parse_options
|
50
|
+
reporter_options = {}
|
51
|
+
reporter_options[:backtrace] = false
|
52
|
+
|
53
|
+
OptionParser.new do |opts|
|
54
|
+
opts.on('-b', '--backtrace', "Show backtrace of errors") do |v|
|
55
|
+
reporter_options[:backtrace] = v
|
56
|
+
end
|
57
|
+
opts.on_tail('--version', "Show version") do
|
58
|
+
puts Spinach::VERSION
|
59
|
+
exit
|
60
|
+
end
|
61
|
+
end.parse!(@args)
|
62
|
+
{reporter: reporter_options}
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -9,31 +9,34 @@ module Spinach
|
|
9
9
|
# Prints the feature name to the standard output
|
10
10
|
#
|
11
11
|
def feature(name)
|
12
|
-
puts "\
|
12
|
+
puts "\n#{'Feature:'.magenta} #{name.light_magenta}"
|
13
13
|
end
|
14
14
|
|
15
15
|
# Prints the scenario name to the standard ouput
|
16
16
|
#
|
17
17
|
def scenario(name)
|
18
|
-
puts "\n Scenario: #{name}"
|
18
|
+
puts "\n #{'Scenario:'.green} #{name.light_green}"
|
19
|
+
puts
|
19
20
|
end
|
20
21
|
|
21
22
|
# Prints the step name to the standard output. If failed, it puts an
|
22
23
|
# F! before
|
23
24
|
#
|
24
25
|
def step(keyword, name, result)
|
25
|
-
case result
|
26
|
+
color, symbol = case result
|
26
27
|
when :success
|
27
|
-
|
28
|
+
[:green, '✔']
|
28
29
|
when :undefined_step
|
29
|
-
|
30
|
+
[:yellow, '?']
|
30
31
|
when :failure
|
31
|
-
|
32
|
+
[:red, '✘']
|
32
33
|
when :error
|
33
|
-
|
34
|
+
[:red, '!']
|
34
35
|
when :skip
|
35
|
-
|
36
|
+
[:cyan, '~']
|
36
37
|
end
|
38
|
+
puts " #{symbol.colorize(:"light_#{color}")} #{keyword.colorize(:"light_#{color}")} #{name.colorize(color)}"
|
39
|
+
|
37
40
|
end
|
38
41
|
|
39
42
|
# Prints a blank line at the end
|
@@ -44,20 +47,28 @@ module Spinach
|
|
44
47
|
|
45
48
|
def error_summary(errors)
|
46
49
|
puts
|
47
|
-
puts "
|
48
|
-
puts
|
50
|
+
puts " ! Error summary for this feature (#{errors.length})".light_white
|
49
51
|
errors.each do |error, step, line, scenario|
|
50
52
|
step_file = error.backtrace.detect do |f|
|
51
53
|
f =~ /<class:#{scenario.feature.class}>/
|
52
54
|
end
|
53
55
|
step_file = step_file.split(':')[0..1].join(':') if step_file
|
54
56
|
|
57
|
+
color = if error.kind_of?(Spinach::StepNotDefinedException)
|
58
|
+
:light_yellow
|
59
|
+
else
|
60
|
+
:light_red
|
61
|
+
end
|
62
|
+
|
55
63
|
puts
|
56
|
-
puts "
|
57
|
-
puts "
|
58
|
-
|
59
|
-
|
60
|
-
|
64
|
+
puts " #{scenario.feature_name} :: #{scenario.name} :: #{step.colorize(color)} (line #{line})"
|
65
|
+
puts " #{step_file}" if step_file
|
66
|
+
error.message.split("\n").each do |line|
|
67
|
+
puts " #{line}".colorize(color)
|
68
|
+
end
|
69
|
+
if options[:backtrace]
|
70
|
+
puts error.backtrace.map {|e| " #{e}"}
|
71
|
+
end
|
61
72
|
puts
|
62
73
|
end
|
63
74
|
end
|
data/lib/spinach/reporter.rb
CHANGED
@@ -7,10 +7,13 @@ module Spinach
|
|
7
7
|
#
|
8
8
|
class Reporter
|
9
9
|
# Initialize a reporter with an empty error container.
|
10
|
-
def initialize
|
10
|
+
def initialize(options = {})
|
11
11
|
@errors = []
|
12
|
+
@options = options
|
12
13
|
end
|
13
14
|
|
15
|
+
attr_accessor :options
|
16
|
+
|
14
17
|
# Receives this hook when a feature is invoked
|
15
18
|
# @param [String] name
|
16
19
|
# the feature name
|
@@ -45,7 +45,7 @@ module Spinach
|
|
45
45
|
# the parsed scenarios for this runner's feature
|
46
46
|
#
|
47
47
|
def scenarios
|
48
|
-
@scenarios ||= data['elements']
|
48
|
+
@scenarios ||= (data['elements'] || [])
|
49
49
|
end
|
50
50
|
|
51
51
|
# Runs this feature
|
@@ -64,6 +64,9 @@ module Spinach
|
|
64
64
|
|
65
65
|
unless failures.length.zero?
|
66
66
|
reporter.error_summary(failures)
|
67
|
+
return false
|
68
|
+
else
|
69
|
+
return true
|
67
70
|
end
|
68
71
|
end
|
69
72
|
|
data/lib/spinach/runner.rb
CHANGED
@@ -46,10 +46,11 @@ module Spinach
|
|
46
46
|
require_dependencies
|
47
47
|
|
48
48
|
filenames.each do |filename|
|
49
|
-
Feature.new(filename, reporter).run
|
49
|
+
success = Feature.new(filename, reporter).run
|
50
|
+
@failed = true unless success
|
50
51
|
end
|
51
52
|
reporter.end
|
52
|
-
|
53
|
+
@failed ? false : true
|
53
54
|
end
|
54
55
|
|
55
56
|
# Requires step definitions and support files
|
data/lib/spinach/version.rb
CHANGED
data/lib/spinach.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe Spinach::Cli do
|
4
|
+
describe "#options" do
|
5
|
+
it "defaults" do
|
6
|
+
cli = Spinach::Cli.new([])
|
7
|
+
options = cli.options
|
8
|
+
options[:reporter][:backtrace].must_equal false
|
9
|
+
end
|
10
|
+
describe "backtrace" do
|
11
|
+
%w{-b --backtrace}.each do |opt|
|
12
|
+
it "sets the backtrace if #{opt}" do
|
13
|
+
cli = Spinach::Cli.new([opt])
|
14
|
+
options = cli.options
|
15
|
+
options[:reporter][:backtrace].must_equal true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
describe "#init_reporter" do
|
21
|
+
it "inits the default reporter" do
|
22
|
+
Spinach.config.default_reporter.wont_equal nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
describe "#run" do
|
26
|
+
describe "when a particular feature list is passed" do
|
27
|
+
it "runs the feature" do
|
28
|
+
cli = Spinach::Cli.new(['features/some_feature.feature'])
|
29
|
+
Spinach::Runner.expects(:new).with(['features/some_feature.feature']).
|
30
|
+
returns(stub(:run))
|
31
|
+
cli.run
|
32
|
+
end
|
33
|
+
end
|
34
|
+
describe "when no feature is passed" do
|
35
|
+
it "runs the feature" do
|
36
|
+
cli = Spinach::Cli.new([])
|
37
|
+
Dir.expects(:glob).with('features/**/*.feature').
|
38
|
+
returns(['features/some_feature.feature'])
|
39
|
+
Spinach::Runner.expects(:new).with(['features/some_feature.feature']).
|
40
|
+
returns(stub(:run))
|
41
|
+
cli.run
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -12,7 +12,7 @@ describe Spinach::Reporter::Stdout do
|
|
12
12
|
out = capture_stdout do
|
13
13
|
@reporter.feature "User authentication"
|
14
14
|
end
|
15
|
-
out.string.
|
15
|
+
out.string.must_match /Feature:.*User authentication/
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ describe Spinach::Reporter::Stdout do
|
|
21
21
|
out = capture_stdout do
|
22
22
|
@reporter.scenario "User logs in"
|
23
23
|
end
|
24
|
-
out.string.
|
24
|
+
out.string.must_match /Scenario:.*User logs in/
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -35,7 +35,7 @@ describe Spinach::Reporter::Stdout do
|
|
35
35
|
@reporter.step "Given", "I say goodbye", :success
|
36
36
|
end
|
37
37
|
out.string.must_include "✔"
|
38
|
-
out.string.
|
38
|
+
out.string.must_match /Given.*I say goodbye/
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -45,7 +45,7 @@ describe Spinach::Reporter::Stdout do
|
|
45
45
|
@reporter.step "Given", "I say goodbye", :undefined_step
|
46
46
|
end
|
47
47
|
out.string.must_include "?"
|
48
|
-
out.string.
|
48
|
+
out.string.must_match /Given.*I say goodbye/
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -55,7 +55,7 @@ describe Spinach::Reporter::Stdout do
|
|
55
55
|
@reporter.step "Given", "I say goodbye", :failure
|
56
56
|
end
|
57
57
|
out.string.must_include "✘"
|
58
|
-
out.string.
|
58
|
+
out.string.must_match /Given.*I say goodbye/
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -65,7 +65,7 @@ describe Spinach::Reporter::Stdout do
|
|
65
65
|
@reporter.step "Given", "I say goodbye", :error
|
66
66
|
end
|
67
67
|
out.string.must_include "!"
|
68
|
-
out.string.
|
68
|
+
out.string.must_match /Given.*I say goodbye/
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -75,7 +75,7 @@ describe Spinach::Reporter::Stdout do
|
|
75
75
|
@reporter.step "Given", "I say nothing", :skip
|
76
76
|
end
|
77
77
|
out.string.must_include "~"
|
78
|
-
out.string.
|
78
|
+
out.string.must_match /Given.*I say nothing/
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -90,7 +90,7 @@ describe Spinach::Reporter::Stdout do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
describe "#error_summary" do
|
93
|
-
|
93
|
+
before do
|
94
94
|
make_error = proc do |message|
|
95
95
|
stub(
|
96
96
|
message: message,
|
@@ -106,13 +106,30 @@ describe Spinach::Reporter::Stdout do
|
|
106
106
|
)
|
107
107
|
end
|
108
108
|
|
109
|
-
errors = [
|
109
|
+
@errors = [
|
110
110
|
[make_error.('omg'), "some_file", "3", make_scenario.('feature')],
|
111
111
|
[make_error.('wtf'), "other_file", "9", make_scenario.('feature')],
|
112
112
|
]
|
113
113
|
|
114
|
+
end
|
115
|
+
|
116
|
+
it "outputs an error summary" do
|
114
117
|
out = capture_stdout do
|
115
|
-
@reporter.error_summary(errors)
|
118
|
+
@reporter.error_summary(@errors)
|
119
|
+
end
|
120
|
+
out.string.must_include "omg"
|
121
|
+
out.string.must_include "some_file"
|
122
|
+
out.string.must_include "(line 3)"
|
123
|
+
out.string.must_include "wtf"
|
124
|
+
out.string.must_include "other_file"
|
125
|
+
out.string.must_include "(line 9)"
|
126
|
+
out.string.wont_include "foo:1"
|
127
|
+
out.string.wont_include "bar:2"
|
128
|
+
end
|
129
|
+
it "outputs an error summary with backtrace" do
|
130
|
+
@reporter.options[:backtrace] = true
|
131
|
+
out = capture_stdout do
|
132
|
+
@reporter.error_summary(@errors)
|
116
133
|
end
|
117
134
|
out.string.must_include "omg"
|
118
135
|
out.string.must_include "some_file"
|
@@ -120,7 +137,6 @@ describe Spinach::Reporter::Stdout do
|
|
120
137
|
out.string.must_include "wtf"
|
121
138
|
out.string.must_include "other_file"
|
122
139
|
out.string.must_include "(line 9)"
|
123
|
-
|
124
140
|
out.string.must_include "foo:1"
|
125
141
|
out.string.must_include "bar:2"
|
126
142
|
end
|
@@ -80,6 +80,20 @@ describe Spinach::Runner::Feature do
|
|
80
80
|
@feature.run
|
81
81
|
end
|
82
82
|
|
83
|
+
it "returns true if the execution succeeds" do
|
84
|
+
@feature.stubs(reporter: stub_everything)
|
85
|
+
Spinach::Runner::Scenario.any_instance.
|
86
|
+
expects(run: nil).times(3)
|
87
|
+
@feature.run.must_equal true
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns false if the execution fails" do
|
91
|
+
@feature.stubs(reporter: stub_everything)
|
92
|
+
Spinach::Runner::Scenario.any_instance.
|
93
|
+
expects(run: stub_everything).times(3)
|
94
|
+
@feature.run.must_equal false
|
95
|
+
end
|
96
|
+
|
83
97
|
it 'calls only the given scenario' do
|
84
98
|
@filename = 'feature/a_cool_feature.feature:12'
|
85
99
|
@feature = Spinach::Runner::Feature.new(@filename, @reporter)
|
@@ -42,7 +42,7 @@ describe Spinach::Runner::Scenario do
|
|
42
42
|
@scenario.run
|
43
43
|
end
|
44
44
|
|
45
|
-
describe '
|
45
|
+
describe 'when throwing exceptions' do
|
46
46
|
it 'rescues a MiniTest::Assertion' do
|
47
47
|
@feature.expects(:execute_step).raises(MiniTest::Assertion)
|
48
48
|
@reporter.expects(:step).with(anything, anything, :failure)
|
@@ -61,10 +61,17 @@ describe Spinach::Runner::Scenario do
|
|
61
61
|
@scenario.run
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
65
|
-
@
|
66
|
-
@scenario.run
|
64
|
+
it "returns an failure" do
|
65
|
+
@feature.expects(:execute_step).raises(MiniTest::Assertion)
|
66
|
+
@scenario.run.wont_equal nil
|
67
67
|
end
|
68
|
+
|
68
69
|
end
|
70
|
+
|
71
|
+
it 'runs a step' do
|
72
|
+
@reporter.expects(:step).with(anything, anything, :success).times(3)
|
73
|
+
@scenario.run.must_equal nil
|
74
|
+
end
|
75
|
+
|
69
76
|
end
|
70
77
|
end
|
data/test/spinach/runner_test.rb
CHANGED
@@ -40,14 +40,21 @@ describe Spinach::Runner do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
describe "#run" do
|
43
|
-
|
44
|
-
feature = stub
|
43
|
+
before do
|
44
|
+
@feature = stub
|
45
45
|
@runner.stubs(reporter: stub_everything)
|
46
46
|
@filenames.each do |filename|
|
47
47
|
Spinach::Runner::Feature.expects(:new).
|
48
48
|
with(filename, anything).
|
49
|
-
returns(feature)
|
49
|
+
returns(@feature)
|
50
50
|
end
|
51
|
+
end
|
52
|
+
it "instantiates a new Feature and runs it with every file" do
|
53
|
+
@feature.stubs(run: true)
|
54
|
+
@runner.run.must_equal true
|
55
|
+
end
|
56
|
+
it "returns false if it fails" do
|
57
|
+
@feature.stubs(run: false)
|
51
58
|
@runner.run
|
52
59
|
end
|
53
60
|
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.0.
|
4
|
+
version: 0.0.6
|
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-
|
15
|
+
date: 2011-10-02 00:00:00.000000000Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: gherkin
|
19
|
-
requirement: &
|
19
|
+
requirement: &70159042831880 !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: *
|
27
|
+
version_requirements: *70159042831880
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: minitest
|
30
|
-
requirement: &
|
30
|
+
requirement: &70159042831460 !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: *
|
38
|
+
version_requirements: *70159042831460
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: colorize
|
41
|
-
requirement: &
|
41
|
+
requirement: &70159042861760 !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: :runtime
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *70159042861760
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: activesupport
|
52
|
-
requirement: &
|
52
|
+
requirement: &70159042861340 !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: :runtime
|
59
59
|
prerelease: false
|
60
|
-
version_requirements: *
|
60
|
+
version_requirements: *70159042861340
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: purdytest
|
63
|
-
requirement: &
|
63
|
+
requirement: &70159042860920 !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: *
|
71
|
+
version_requirements: *70159042860920
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: rake
|
74
|
-
requirement: &
|
74
|
+
requirement: &70159042860500 !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: *
|
82
|
+
version_requirements: *70159042860500
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mocha
|
85
|
-
requirement: &
|
85
|
+
requirement: &70159042860080 !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: *
|
93
|
+
version_requirements: *70159042860080
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: sinatra
|
96
|
-
requirement: &
|
96
|
+
requirement: &70159042859660 !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: *
|
104
|
+
version_requirements: *70159042859660
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
106
|
name: capybara
|
107
|
-
requirement: &
|
107
|
+
requirement: &70159042859240 !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: *
|
115
|
+
version_requirements: *70159042859240
|
116
116
|
- !ruby/object:Gem::Dependency
|
117
117
|
name: aruba
|
118
|
-
requirement: &
|
118
|
+
requirement: &70159042858820 !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: *
|
126
|
+
version_requirements: *70159042858820
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: pry
|
129
|
-
requirement: &
|
129
|
+
requirement: &70159042858400 !ruby/object:Gem::Requirement
|
130
130
|
none: false
|
131
131
|
requirements:
|
132
132
|
- - ! '>='
|
@@ -134,7 +134,7 @@ dependencies:
|
|
134
134
|
version: '0'
|
135
135
|
type: :development
|
136
136
|
prerelease: false
|
137
|
-
version_requirements: *
|
137
|
+
version_requirements: *70159042858400
|
138
138
|
description: Spinach is a BDD framework on top of gherkin
|
139
139
|
email:
|
140
140
|
- info@codegram.com
|
@@ -158,10 +158,16 @@ files:
|
|
158
158
|
- examples/steps/user_logs_in.rb
|
159
159
|
- examples/user_logs_in.feature
|
160
160
|
- examples/user_logs_in.rb
|
161
|
+
- features/error_reporting.feature
|
162
|
+
- features/exit_status.feature
|
161
163
|
- features/feature_name_guessing.feature
|
164
|
+
- features/steps/error_reporting.rb
|
165
|
+
- features/steps/exit_status.rb
|
162
166
|
- features/steps/feature_name_guessing.rb
|
167
|
+
- features/support/spinach_runner.rb
|
163
168
|
- lib/spinach.rb
|
164
169
|
- lib/spinach/capybara.rb
|
170
|
+
- lib/spinach/cli.rb
|
165
171
|
- lib/spinach/config.rb
|
166
172
|
- lib/spinach/dsl.rb
|
167
173
|
- lib/spinach/exceptions.rb
|
@@ -176,6 +182,7 @@ files:
|
|
176
182
|
- lib/spinach/version.rb
|
177
183
|
- spinach.gemspec
|
178
184
|
- test/spinach/capybara_test.rb
|
185
|
+
- test/spinach/cli_test.rb
|
179
186
|
- test/spinach/config_test.rb
|
180
187
|
- test/spinach/dsl_test.rb
|
181
188
|
- test/spinach/feature_test.rb
|
@@ -213,9 +220,15 @@ signing_key:
|
|
213
220
|
specification_version: 3
|
214
221
|
summary: Spinach is a BDD framework on top of gherkin
|
215
222
|
test_files:
|
223
|
+
- features/error_reporting.feature
|
224
|
+
- features/exit_status.feature
|
216
225
|
- features/feature_name_guessing.feature
|
226
|
+
- features/steps/error_reporting.rb
|
227
|
+
- features/steps/exit_status.rb
|
217
228
|
- features/steps/feature_name_guessing.rb
|
229
|
+
- features/support/spinach_runner.rb
|
218
230
|
- test/spinach/capybara_test.rb
|
231
|
+
- test/spinach/cli_test.rb
|
219
232
|
- test/spinach/config_test.rb
|
220
233
|
- test/spinach/dsl_test.rb
|
221
234
|
- test/spinach/feature_test.rb
|