Skip to content
This repository was archived by the owner on Nov 30, 2024. It is now read-only.

Commit 36fa69a

Browse files
vfonicJonRowe
authored andcommitted
Allow fail_fast to be passed as a string
1 parent e0ecbaf commit 36fa69a

File tree

2 files changed

+107
-3
lines changed

2 files changed

+107
-3
lines changed

lib/rspec/core/configuration.rb

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,33 @@ def only_failures_but_not_configured?
202202
only_failures? && !example_status_persistence_file_path
203203
end
204204

205-
# @macro add_setting
205+
# @macro define_reader
206206
# If specified, indicates the number of failures required before cleaning
207-
# up and exit (default: `nil`).
208-
add_setting :fail_fast
207+
# up and exit (default: `nil`). Can also be `true` to fail and exit on first
208+
# failure
209+
define_reader :fail_fast
210+
211+
# @see fail_fast
212+
def fail_fast=(value)
213+
case value
214+
when true, 'true'
215+
@fail_fast = true
216+
when false, 'false', 0
217+
@fail_fast = false
218+
when nil
219+
@fail_fast = nil
220+
else
221+
@fail_fast = value.to_i
222+
223+
if value.to_i == 0
224+
# TODO: in RSpec 4, consider raising an error here.
225+
RSpec.warning "Cannot set `RSpec.configuration.fail_fast`" \
226+
" to `#{value.inspect}`. Only `true`, `false`, `nil` and integers" \
227+
" are valid values."
228+
@fail_fast = true
229+
end
230+
end
231+
end
209232

210233
# @macro add_setting
211234
# Prints the formatter output of your suite without running any

spec/rspec/core/configuration_spec.rb

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,87 @@ module RSpec::Core
4141
end
4242
end
4343

44+
describe "#fail_fast=" do
45+
context 'when true' do
46+
it 'is set to true' do
47+
config.fail_fast = true
48+
expect(config.fail_fast).to eq true
49+
end
50+
end
51+
52+
context "when 'true'" do
53+
it 'is set to true' do
54+
config.fail_fast = 'true'
55+
expect(config.fail_fast).to eq true
56+
end
57+
end
58+
59+
context "when false" do
60+
it 'is set to false' do
61+
config.fail_fast = false
62+
expect(config.fail_fast).to eq false
63+
end
64+
end
65+
66+
context "when 'false'" do
67+
it 'is set to false' do
68+
config.fail_fast = 'false'
69+
expect(config.fail_fast).to eq false
70+
end
71+
end
72+
73+
context "when 0" do
74+
it 'is set to false' do
75+
config.fail_fast = 0
76+
expect(config.fail_fast).to eq false
77+
end
78+
end
79+
80+
context "when integer number" do
81+
it 'is set to number' do
82+
config.fail_fast = 5
83+
expect(config.fail_fast).to eq 5
84+
end
85+
end
86+
87+
context "when floating point number" do
88+
it 'is set to integer number' do
89+
config.fail_fast = 5.9
90+
expect(config.fail_fast).to eq 5
91+
end
92+
end
93+
94+
context "when string represeting an integer number" do
95+
it 'is set to number' do
96+
config.fail_fast = '5'
97+
expect(config.fail_fast).to eq 5
98+
end
99+
end
100+
101+
context "when nil" do
102+
it 'is nil' do
103+
config.fail_fast = nil
104+
expect(config.fail_fast).to eq nil
105+
end
106+
end
107+
108+
context "when unrecognized value" do
109+
before do
110+
allow(RSpec).to receive(:warning)
111+
end
112+
113+
it 'prints warning' do
114+
config.fail_fast = 'yes'
115+
expect(RSpec).to have_received(:warning).with(/Cannot set `RSpec.configuration.fail_fast`/i)
116+
end
117+
118+
it 'is set to true' do
119+
config.fail_fast = 'yes'
120+
expect(config.fail_fast).to eq true
121+
end
122+
end
123+
end
124+
44125
describe 'fail_if_no_examples' do
45126
it 'defaults to false' do
46127
expect(RSpec::Core::Configuration.new.fail_if_no_examples).to be(false)

0 commit comments

Comments
 (0)