ΠΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· config.extend(...)
, Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π² ΠΎΠ±ΡΠΈΡ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ
.
module Foo
def something
puts 'hi'
end
end
RSpec.configure do |config|
config.extend(Foo)
end
RSpec.shared_context 'shared' do
something
end
ΠΠ΅ΡΠ°ΡΠ°Π΅Ρ "ΠΏΡΠΈΠ²Π΅Ρ"
something
Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ
ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠΎΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ? Π― Π½Π΅ ΠΌΠΎΠ³Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:
module Foo
def something
puts 'hi'
end
end
RSpec.configure do |config|
config.extend Foo
end
RSpec.shared_context 'shared' do
something
end
RSpec.describe do
include_context 'shared'
it { }
end
Π²ΡΡ ΠΎΠ΄Ρ:
$ rspec spec/a_spec.rb
hi
Run options: exclude {:ruby=>#<Proc:./spec/spec_helper.rb:99>}
Randomized with seed 10987
example at ./spec/a_spec.rb:18
Finished in 0.00185 seconds (files took 1.19 seconds to load)
1 example, 0 failures
Randomized with seed 10987
Π― Π·Π°ΠΊΡΠΎΡ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΈ Π²ΡΡΡΠ½Ρ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ Ρ ΠΌΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΠ²Π΅Ρ. Π‘ΠΎΠΎΠ±ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΡΡΠΎ Π²ΡΡΡΠ½Ρ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
module Foo
def something
puts 'hi'
end
end
RSpec.configure do |config|
config.extend Foo
end
RSpec.shared_context 'shared' do
something
end
RSpec.configure do |config|
config.include_context 'shared', foo: :enabled
end
RSpec.describe "Foo", foo: :enabled do
it { }
end
Π²ΡΡ ΠΎΠ΄Ρ:
$ rspec spec/foo_spec.rb
An error occurred while loading ./spec/foo_spec.rb.
Failure/Error: something
NameError:
undefined local variable or method `something' for RSpec::ExampleGroups::Foo:Class
No examples found.
Finished in 0.00017 seconds (files took 1.35 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
@pirj Π― ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ @tubaxenor ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ» Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ.
ΠΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΡΡΠΎ Π΄Π΅Π»ΠΎ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π’ΠΎΡΠΊΠΈ Π±ΡΡΡΡΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² lib/rspec/core/configuration.rb:1513
.
ΠΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΈΡΠΈΡΡ, Π° ΠΏΠΎΡΠ»Π΅ - Π²ΠΊΠ»ΡΡΠΈΡΡ. ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅?
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ 1513 ΠΈ 1514 ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ / ΡΡΠ½ΠΊΡΠΈΠΈ.
Π₯ΠΎΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡΠΈ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅?