r_spec-clone 1.3.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.md +1 -1
- data/README.md +31 -29
- data/lib/r_spec/clone/dsl.rb +4 -169
- data/lib/r_spec/clone/expectation_helper/it.rb +1 -1
- data/lib/r_spec/clone/expectation_helper/shared.rb +49 -1
- data/lib/r_spec.rb +0 -87
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2e7a16588ed11ac0ab9cd7eebcb01c3d6e914d351c5041cfbed6015c88128ea
|
4
|
+
data.tar.gz: 96dfc31819a59b319c06c777a63aa09daf5630a3db7cf5860c59474b1809f94c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f34d7820173f21ffdafe71d206314aee90904ab7b9a46c29511aed5e4191742e87a14ef2e9da512e48917c080c97d52b5618ce545519f49955fb3edc6b20022d
|
7
|
+
data.tar.gz: d2ad326e9150e95b19f9f62994568e5a44474b6567727e15c38020ede970f1c20b4bd0ddc1d1ab450f968fedfd109ed795accda5724b0424ef666fe09e31e92c
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -32,7 +32,8 @@ A minimalist __RSpec clone__ with all the essentials.
|
|
32
32
|
* The `let` method defines a helper method rather than a memoized helper method.
|
33
33
|
* The one-liner `is_expected` syntax also works with block expectations.
|
34
34
|
* `subject`, `before`, `after` and `let` definitions must come before examples.
|
35
|
-
*
|
35
|
+
* The execution of the test suite stops as soon as an error is detected.
|
36
|
+
* The order of the unit tests does not matter because they are executed in isolation.
|
36
37
|
|
37
38
|
## Installation
|
38
39
|
|
@@ -72,9 +73,10 @@ To use the `RSpec` module and its DSL, you need to add `require "r_spec"` to you
|
|
72
73
|
Many projects use a custom spec helper which organizes these includes.
|
73
74
|
|
74
75
|
Concrete test cases are defined in `it` blocks.
|
75
|
-
An optional descriptive string
|
76
|
+
An optional (but recommended) descriptive string or module indicates the purpose of the test and a block contains the main logic of the test.
|
76
77
|
|
77
|
-
Test cases that have been defined or outlined but are not yet expected to work can be defined using `pending` instead of `it`.
|
78
|
+
Test cases that have been defined or outlined but are not yet expected to work can be defined using `pending` instead of `it`.
|
79
|
+
They will not be run but show up in the spec report as pending.
|
78
80
|
|
79
81
|
An `it` block contains an example that should invoke the code to be tested and define what is expected of it.
|
80
82
|
Each example can contain multiple expectations, but it should test only one specific behaviour.
|
@@ -96,28 +98,7 @@ For unit tests, it is recommended to follow the conventions for method names:
|
|
96
98
|
|
97
99
|
To establish certain contexts — think _empty array_ versus _array with elements_ — the `context` method may be used to communicate this to the reader.
|
98
100
|
|
99
|
-
|
100
|
-
|
101
|
-
```ruby
|
102
|
-
app = "foo"
|
103
|
-
|
104
|
-
RSpec.describe "Side effects per example" do
|
105
|
-
it! "runs the example in isolation" do
|
106
|
-
expect { app.gsub!("foo", "bar") }.to eq "bar"
|
107
|
-
expect(app).to eq "bar"
|
108
|
-
end
|
109
|
-
|
110
|
-
it "runs the example" do
|
111
|
-
expect(app).to eq "foo"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# Success: expected to eq "bar".
|
116
|
-
# Success: expected to eq "bar".
|
117
|
-
# Success: expected to eq "foo".
|
118
|
-
```
|
119
|
-
|
120
|
-
Note: if you are wondering what the Ruby code generated by using the DSL might look like, an article presents the correspondence between each method via simple examples, available in [English](https://dev.to/cyri_/what-ruby-code-to-expect-from-a-testing-dsl-4oe1), [Chinese](https://ruby-china.org/topics/41441) and [Japanese](https://qiita.com/cyril/items/17ee758e162bae144a07).
|
101
|
+
Note: if you are wondering what kind of code might be generated by the DSL, an article that shows the dynamic transcription of the main methods with simple examples is available in [Chinese](https://ruby-china.org/topics/41441), in [English](https://dev.to/cyri_/what-ruby-code-to-expect-from-a-testing-dsl-4oe1) and in [Japanese](https://qiita.com/cyril/items/17ee758e162bae144a07).
|
121
102
|
|
122
103
|
### Expectations
|
123
104
|
|
@@ -137,6 +118,12 @@ expect(actual).to equal(expected) # passes if expected.equal?(actual)
|
|
137
118
|
expect(actual).to be(expected) # passes if expected.equal?(actual)
|
138
119
|
```
|
139
120
|
|
121
|
+
#### Comparisons
|
122
|
+
|
123
|
+
```ruby
|
124
|
+
expect(actual).to be_within(delta).of(expected) # passes if (expected - actual).abs <= delta
|
125
|
+
```
|
126
|
+
|
140
127
|
#### Regular expressions
|
141
128
|
|
142
129
|
```ruby
|
@@ -174,9 +161,24 @@ expect(actual).to be_instance_of(expected) # passes if expected.equal?(actual
|
|
174
161
|
expect(actual).to be_an_instance_of(expected) # passes if expected.equal?(actual.class)
|
175
162
|
```
|
176
163
|
|
164
|
+
#### Predicate
|
165
|
+
|
166
|
+
```ruby
|
167
|
+
expect(actual).to be_xxx # passes if actual.xxx?
|
168
|
+
expect(actual).to be_have_xxx(:yyy) # passes if actual.has_xxx?(:yyy)
|
169
|
+
```
|
170
|
+
|
171
|
+
##### Examples
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
expect([]).to be_empty
|
175
|
+
expect(foo: 1).to have_key(:foo)
|
176
|
+
```
|
177
|
+
|
177
178
|
#### Change
|
178
179
|
|
179
180
|
```ruby
|
181
|
+
expect { object.action }.to change(object, :value).to(new)
|
180
182
|
expect { object.action }.to change(object, :value).from(old).to(new)
|
181
183
|
expect { object.action }.to change(object, :value).by(delta)
|
182
184
|
expect { object.action }.to change(object, :value).by_at_least(minimum_delta)
|
@@ -263,7 +265,7 @@ Benchmark against [100 executions of a file containing 1 expectation](https://gi
|
|
263
265
|
|
264
266
|
### Runtime
|
265
267
|
|
266
|
-
Benchmark against [1 execution of a file containing
|
268
|
+
Benchmark against [1 execution of a file containing 100,000 expectations](https://github.com/cyril/r_spec-clone.rb/blob/main/benchmark/run_time/) (lower is better).
|
267
269
|
|
268
270
|
![Runtime benchmark](https://r-spec.dev/benchmark-run-time.svg)
|
269
271
|
|
@@ -275,7 +277,7 @@ __RSpec clone__'s specifications are self-described here: [spec/](https://github
|
|
275
277
|
|
276
278
|
* Home page: [https://r-spec.dev/](https://r-spec.dev/)
|
277
279
|
* Cheatsheet: [https://r-spec.dev/cheatsheet.html](https://r-spec.dev/cheatsheet.html)
|
278
|
-
* Blog post: [https://
|
280
|
+
* Blog post: [https://cyrilllllll.medium.com/introducing-a-new-rspec-850d48c0f901](https://cyrilllllll.medium.com/introducing-a-new-rspec-850d48c0f901)
|
279
281
|
* Source code: [https://github.com/cyril/r_spec-clone.rb](https://github.com/cyril/r_spec-clone.rb)
|
280
282
|
* API Doc: [https://rubydoc.info/gems/r_spec-clone](https://rubydoc.info/gems/r_spec-clone)
|
281
283
|
* Twitter: [https://twitter.com/cyri\_](https://twitter.com/cyri\_)
|
@@ -289,9 +291,9 @@ Without RSpec, this clone would not have been possible.
|
|
289
291
|
|
290
292
|
## Buy me a coffee ☕
|
291
293
|
|
292
|
-
If you like this project, please consider making a small donation
|
294
|
+
If you like this project, please consider making a small donation.
|
293
295
|
|
294
|
-
[![Donate](https://img.shields.io/badge/Donate-
|
296
|
+
[![Donate](https://img.shields.io/badge/Donate-cyr.eth-purple.svg)](https://etherscan.io/address/cyr.eth)
|
295
297
|
|
296
298
|
## Versioning
|
297
299
|
|
data/lib/r_spec/clone/dsl.rb
CHANGED
@@ -173,47 +173,6 @@ module RSpec
|
|
173
173
|
|
174
174
|
# :nocov:
|
175
175
|
|
176
|
-
# Runs a describe example group in a subprocess to isolate side effects.
|
177
|
-
#
|
178
|
-
# @example
|
179
|
-
# $app = "foo"
|
180
|
-
#
|
181
|
-
# require "r_spec"
|
182
|
-
#
|
183
|
-
# RSpec.describe "Scoped side effects" do
|
184
|
-
# describe! "#gsub!" do
|
185
|
-
# before do
|
186
|
-
# $app.gsub!("o", "0")
|
187
|
-
# end
|
188
|
-
#
|
189
|
-
# context! "when isolated in the context" do
|
190
|
-
# before do
|
191
|
-
# $app.gsub!("f", "F")
|
192
|
-
# end
|
193
|
-
#
|
194
|
-
# it { expect($app).to eq "F00" }
|
195
|
-
# end
|
196
|
-
#
|
197
|
-
# it { expect($app).to eq "f00" }
|
198
|
-
# end
|
199
|
-
#
|
200
|
-
# it { expect($app).to eq "foo" }
|
201
|
-
# end
|
202
|
-
#
|
203
|
-
# # Output to the console
|
204
|
-
# # Success: expected to eq "F00".
|
205
|
-
# # Success: expected to eq "f00".
|
206
|
-
# # Success: expected to eq "foo".
|
207
|
-
#
|
208
|
-
# @param (see #describe)
|
209
|
-
#
|
210
|
-
# @api public
|
211
|
-
def self.describe!(const, &block)
|
212
|
-
fork! { describe(const, &block) }
|
213
|
-
end
|
214
|
-
|
215
|
-
# :nocov:
|
216
|
-
|
217
176
|
# Defines an example group that establishes a specific context, like
|
218
177
|
# _empty array_ versus _array with elements_.
|
219
178
|
#
|
@@ -246,48 +205,6 @@ module RSpec
|
|
246
205
|
|
247
206
|
# :nocov:
|
248
207
|
|
249
|
-
# Runs a context example group in a subprocess to isolate side effects.
|
250
|
-
#
|
251
|
-
# @example
|
252
|
-
# app = "Hello, world!"
|
253
|
-
#
|
254
|
-
# require "r_spec"
|
255
|
-
#
|
256
|
-
# RSpec.describe String do
|
257
|
-
# subject do
|
258
|
-
# app
|
259
|
-
# end
|
260
|
-
#
|
261
|
-
# before do
|
262
|
-
# subject.gsub!("world", person)
|
263
|
-
# end
|
264
|
-
#
|
265
|
-
# context! "when Alice is greeted" do
|
266
|
-
# let(:person) { "Alice" }
|
267
|
-
#
|
268
|
-
# it { is_expected.to eq "Hello, Alice!" }
|
269
|
-
# end
|
270
|
-
#
|
271
|
-
# context! "when Bob is greeted" do
|
272
|
-
# let(:person) { "Bob" }
|
273
|
-
#
|
274
|
-
# it { is_expected.to eq "Hello, Bob!" }
|
275
|
-
# end
|
276
|
-
# end
|
277
|
-
#
|
278
|
-
# # Output to the console
|
279
|
-
# # Success: expected to eq "Hello, Alice!".
|
280
|
-
# # Success: expected to eq "Hello, Bob!".
|
281
|
-
#
|
282
|
-
# @param (see #context)
|
283
|
-
#
|
284
|
-
# @api public
|
285
|
-
def self.context!(description, &block)
|
286
|
-
fork! { context(description, &block) }
|
287
|
-
end
|
288
|
-
|
289
|
-
# :nocov:
|
290
|
-
|
291
208
|
# Defines a concrete test case.
|
292
209
|
#
|
293
210
|
# The test is performed by the block supplied to `&block`.
|
@@ -329,42 +246,7 @@ module RSpec
|
|
329
246
|
#
|
330
247
|
# @api public
|
331
248
|
def self.it(_name = nil, &block)
|
332
|
-
run(example_without_attribute.new, &block)
|
333
|
-
end
|
334
|
-
|
335
|
-
# :nocov:
|
336
|
-
|
337
|
-
# Runs a concrete test case in a subprocess to isolate side effects.
|
338
|
-
#
|
339
|
-
# @example
|
340
|
-
# app = "foo"
|
341
|
-
#
|
342
|
-
# require "r_spec"
|
343
|
-
#
|
344
|
-
# RSpec.describe "Side effects per example" do
|
345
|
-
# it! "runs the example in isolation" do
|
346
|
-
# expect { app.gsub!("foo", "bar") }.to eq "bar"
|
347
|
-
# expect(app).to eq "bar"
|
348
|
-
# end
|
349
|
-
#
|
350
|
-
# it "runs the example" do
|
351
|
-
# expect(app).to eq "foo"
|
352
|
-
# end
|
353
|
-
# end
|
354
|
-
#
|
355
|
-
# # Output to the console
|
356
|
-
# # Success: expected to eq "bar".
|
357
|
-
# # Success: expected to eq "bar".
|
358
|
-
# # Success: expected to eq "foo".
|
359
|
-
#
|
360
|
-
# @param (see #it)
|
361
|
-
#
|
362
|
-
# @raise (see ExpectationTarget::Base#result)
|
363
|
-
# @return (see ExpectationTarget::Base#result)
|
364
|
-
#
|
365
|
-
# @api public
|
366
|
-
def self.it!(name = nil, &block)
|
367
|
-
fork! { it(name, &block) }
|
249
|
+
exit false unless ::Aw.fork? { run(example_without_attribute.new, &block) }
|
368
250
|
end
|
369
251
|
|
370
252
|
# :nocov:
|
@@ -416,43 +298,7 @@ module RSpec
|
|
416
298
|
#
|
417
299
|
# @api public
|
418
300
|
def self.its(attribute, *args, **kwargs, &block)
|
419
|
-
run(example_with_attribute(attribute, *args, **kwargs).new, &block)
|
420
|
-
end
|
421
|
-
|
422
|
-
# :nocov:
|
423
|
-
|
424
|
-
# Runs a single concrete test case in a subprocess to isolate side
|
425
|
-
# effects.
|
426
|
-
#
|
427
|
-
# @example
|
428
|
-
# app = "foo"
|
429
|
-
#
|
430
|
-
# require "r_spec"
|
431
|
-
#
|
432
|
-
# RSpec.describe "Isolated side effect" do
|
433
|
-
# subject do
|
434
|
-
# app
|
435
|
-
# end
|
436
|
-
#
|
437
|
-
# its!(:upcase) { is_expected.to eq "FOO" }
|
438
|
-
#
|
439
|
-
# it "tests the original value" do
|
440
|
-
# expect(app).to eq "foo"
|
441
|
-
# end
|
442
|
-
# end
|
443
|
-
#
|
444
|
-
# # Output to the console
|
445
|
-
# # Success: expected to eq "FOO".
|
446
|
-
# # Success: expected to eq "foo".
|
447
|
-
#
|
448
|
-
# @param (see #it)
|
449
|
-
#
|
450
|
-
# @raise (see ExpectationTarget::Base#result)
|
451
|
-
# @return (see ExpectationTarget::Base#result)
|
452
|
-
#
|
453
|
-
# @api public
|
454
|
-
def self.its!(attribute, *args, **kwargs, &block)
|
455
|
-
fork! { its(attribute, *args, **kwargs, &block) }
|
301
|
+
exit false unless ::Aw.fork? { run(example_with_attribute(attribute, *args, **kwargs).new, &block) }
|
456
302
|
end
|
457
303
|
|
458
304
|
# :nocov:
|
@@ -505,26 +351,15 @@ module RSpec
|
|
505
351
|
end
|
506
352
|
end
|
507
353
|
|
508
|
-
# Creates a subprocess and runs the block inside.
|
509
|
-
def self.fork!(&block)
|
510
|
-
pid = fork(&block)
|
511
|
-
thread = ::Process.detach(pid)
|
512
|
-
exitstatus = thread.join.value.exitstatus
|
513
|
-
exit false unless exitstatus.zero?
|
514
|
-
end
|
515
|
-
|
516
354
|
# Execution of specifications.
|
517
355
|
def self.run(example, &block)
|
518
|
-
example.instance_eval(&block)
|
519
|
-
rescue ::SystemExit
|
520
356
|
Console.source(*block.source_location)
|
521
|
-
|
522
|
-
exit false
|
357
|
+
exit false unless ::Aw.fork? { example.instance_eval(&block) }
|
523
358
|
ensure
|
524
359
|
example&.send(AFTER_METHOD)
|
525
360
|
end
|
526
361
|
|
527
|
-
private_class_method :example_without_attribute, :example_with_attribute, :
|
362
|
+
private_class_method :example_without_attribute, :example_with_attribute, :run
|
528
363
|
|
529
364
|
private
|
530
365
|
|
@@ -19,7 +19,7 @@ module RSpec
|
|
19
19
|
#
|
20
20
|
# @example
|
21
21
|
# expect("foo") # => #<RSpec::Clone::ExpectationTarget::Value:0x00007f @actual="foo">
|
22
|
-
# expect { Boom } # => #<RSpec::Clone::ExpectationTarget::Block:
|
22
|
+
# expect { RSpec::Clone::Boom! } # => #<RSpec::Clone::ExpectationTarget::Block:0x... @callable=#<Proc:0x...>>
|
23
23
|
#
|
24
24
|
# @api public
|
25
25
|
def expect(value = self.class.superclass, &block)
|
@@ -51,6 +51,22 @@ module RSpec
|
|
51
51
|
|
52
52
|
alias equal be
|
53
53
|
|
54
|
+
# Comparisons matcher
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# matcher = be_within(1).of(41)
|
58
|
+
# matcher.matches? { 42 } # => true
|
59
|
+
# matcher.matches? { 43 } # => false
|
60
|
+
#
|
61
|
+
# @param delta [Numeric] A numeric value.
|
62
|
+
#
|
63
|
+
# @return [#matches?] A comparison matcher.
|
64
|
+
#
|
65
|
+
# @api public
|
66
|
+
def be_within(delta)
|
67
|
+
::Matchi::BeWithin.new(delta)
|
68
|
+
end
|
69
|
+
|
54
70
|
# Regular expressions matcher
|
55
71
|
#
|
56
72
|
# @example
|
@@ -71,7 +87,7 @@ module RSpec
|
|
71
87
|
#
|
72
88
|
# @example
|
73
89
|
# matcher = raise_exception(NameError)
|
74
|
-
# matcher.matches? { Boom } # => true
|
90
|
+
# matcher.matches? { RSpec::Clone::Boom! } # => true
|
75
91
|
# matcher.matches? { true } # => false
|
76
92
|
#
|
77
93
|
# @param expected [Exception, #to_s] The expected exception name.
|
@@ -196,6 +212,38 @@ module RSpec
|
|
196
212
|
def satisfy(&expected)
|
197
213
|
::Matchi::Satisfy.new(&expected)
|
198
214
|
end
|
215
|
+
|
216
|
+
private
|
217
|
+
|
218
|
+
# Predicate matcher, or default method missing behavior.
|
219
|
+
#
|
220
|
+
# @example Empty predicate matcher
|
221
|
+
# matcher = be_empty
|
222
|
+
# matcher.matches? { [] } # => true
|
223
|
+
# matcher.matches? { [4] } # => false
|
224
|
+
def method_missing(name, *args, **kwargs, &block)
|
225
|
+
return super unless predicate_matcher_name?(name)
|
226
|
+
|
227
|
+
::Matchi::Predicate.new(name, *args, **kwargs, &block)
|
228
|
+
end
|
229
|
+
|
230
|
+
# :nocov:
|
231
|
+
|
232
|
+
# Hook method to return whether the obj can respond to id method or not.
|
233
|
+
def respond_to_missing?(name, include_private = false)
|
234
|
+
predicate_matcher_name?(name) || super
|
235
|
+
end
|
236
|
+
|
237
|
+
# :nocov:
|
238
|
+
|
239
|
+
# Predicate matcher name detector.
|
240
|
+
#
|
241
|
+
# @param name [Array, Symbol] The name of a potential predicate matcher.
|
242
|
+
#
|
243
|
+
# @return [Boolean] Indicates if it is a predicate matcher name or not.
|
244
|
+
def predicate_matcher_name?(name)
|
245
|
+
name.start_with?("be_", "have_") && !name.end_with?("!", "?")
|
246
|
+
end
|
199
247
|
end
|
200
248
|
end
|
201
249
|
end
|
data/lib/r_spec.rb
CHANGED
@@ -89,36 +89,6 @@ module RSpec
|
|
89
89
|
|
90
90
|
# :nocov:
|
91
91
|
|
92
|
-
# Runs a context example group in a subprocess to isolate side effects.
|
93
|
-
#
|
94
|
-
# @example
|
95
|
-
# str = "Hello, world!"
|
96
|
-
#
|
97
|
-
# require "r_spec"
|
98
|
-
#
|
99
|
-
# RSpec.context! "when a string becomes uppercase" do
|
100
|
-
# before do
|
101
|
-
# str.upcase!
|
102
|
-
# end
|
103
|
-
#
|
104
|
-
# it { expect(str).to eq "HELLO, WORLD!" }
|
105
|
-
# end
|
106
|
-
#
|
107
|
-
# # Output to the console
|
108
|
-
# # Success: expected to eq "HELLO, WORLD!".
|
109
|
-
#
|
110
|
-
# RSpec.it { expect(str).to eq "Hello, world!" }
|
111
|
-
#
|
112
|
-
# # Output to the console
|
113
|
-
# # Success: expected to eq "Hello, world!".
|
114
|
-
#
|
115
|
-
# @param (see #context)
|
116
|
-
def self.context!(description, &block)
|
117
|
-
Clone::Dsl.context!(description, &block)
|
118
|
-
end
|
119
|
-
|
120
|
-
# :nocov:
|
121
|
-
|
122
92
|
# Defines an example group that describes a unit to be tested.
|
123
93
|
#
|
124
94
|
# @example
|
@@ -153,36 +123,6 @@ module RSpec
|
|
153
123
|
|
154
124
|
# :nocov:
|
155
125
|
|
156
|
-
# Runs a describe example group in a subprocess to isolate side effects.
|
157
|
-
#
|
158
|
-
# @example
|
159
|
-
# $app = "foo"
|
160
|
-
#
|
161
|
-
# require "r_spec"
|
162
|
-
#
|
163
|
-
# RSpec.describe! "#gsub!" do
|
164
|
-
# before do
|
165
|
-
# $app.gsub!("o", "0")
|
166
|
-
# end
|
167
|
-
#
|
168
|
-
# it { expect($app).to eq "f00" }
|
169
|
-
# end
|
170
|
-
#
|
171
|
-
# # Output to the console
|
172
|
-
# # Success: expected to eq "f00".
|
173
|
-
#
|
174
|
-
# RSpec.it { expect($app).to eq "foo" }
|
175
|
-
#
|
176
|
-
# # Output to the console
|
177
|
-
# # Success: expected to eq "foo".
|
178
|
-
#
|
179
|
-
# @param (see #describe)
|
180
|
-
def self.describe!(const, &block)
|
181
|
-
Clone::Dsl.describe!(const, &block)
|
182
|
-
end
|
183
|
-
|
184
|
-
# :nocov:
|
185
|
-
|
186
126
|
# Defines a concrete test case.
|
187
127
|
#
|
188
128
|
# The test is performed by the block supplied to &block.
|
@@ -209,33 +149,6 @@ module RSpec
|
|
209
149
|
|
210
150
|
# :nocov:
|
211
151
|
|
212
|
-
# Runs a concrete test case in a subprocess to isolate side effects.
|
213
|
-
#
|
214
|
-
# @example
|
215
|
-
# app = "Hello, world!"
|
216
|
-
#
|
217
|
-
# require "r_spec"
|
218
|
-
#
|
219
|
-
# RSpec.it! { expect(app.gsub!("world", "Alice")).to eq "Hello, Alice!" }
|
220
|
-
#
|
221
|
-
# # Output to the console
|
222
|
-
# # Success: expected to eq "Hello, Alice!".
|
223
|
-
#
|
224
|
-
# RSpec.it { expect(app).to eq "Hello, world!" }
|
225
|
-
#
|
226
|
-
# # Output to the console
|
227
|
-
# # Success: expected to eq "Hello, world!".
|
228
|
-
#
|
229
|
-
# @param (see #it)
|
230
|
-
#
|
231
|
-
# @raise (see ExpectationTarget::Base#result)
|
232
|
-
# @return (see ExpectationTarget::Base#result)
|
233
|
-
def self.it!(name = nil, &block)
|
234
|
-
Clone::Dsl.it!(name, &block)
|
235
|
-
end
|
236
|
-
|
237
|
-
# :nocov:
|
238
|
-
|
239
152
|
# Defines a pending test case.
|
240
153
|
#
|
241
154
|
# `&block` is never evaluated. It can be used to describe behaviour that is
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r_spec-clone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Kato
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aw
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: expresenter
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -30,28 +44,28 @@ dependencies:
|
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.
|
47
|
+
version: 3.3.0
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.
|
54
|
+
version: 3.3.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: test_tube
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.1.
|
61
|
+
version: 2.1.3
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.1.
|
68
|
+
version: 2.1.3
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -211,6 +225,7 @@ metadata:
|
|
211
225
|
documentation_uri: https://rubydoc.info/gems/r_spec-clone
|
212
226
|
source_code_uri: https://github.com/cyril/r_spec-clone.rb
|
213
227
|
wiki_uri: https://github.com/cyril/r_spec-clone.rb/wiki
|
228
|
+
rubygems_mfa_required: 'true'
|
214
229
|
post_install_message:
|
215
230
|
rdoc_options: []
|
216
231
|
require_paths:
|
@@ -219,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
219
234
|
requirements:
|
220
235
|
- - ">="
|
221
236
|
- !ruby/object:Gem::Version
|
222
|
-
version: 2.7.
|
237
|
+
version: 2.7.5
|
223
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
239
|
requirements:
|
225
240
|
- - ">="
|