Rspec-core: рд╕рд╛рдЭрд╛ рд╕рдВрджрд░реНрдн рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рджрд┐рд╕ре░ 2019  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rspec/rspec-core

рдореБрджреНрджреЗ рдХрд╛ рд╡рд┐рд╖рдп

рд╕рд╛рдЭрд╛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рднреАрддрд░ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдкрд░ config.extend(...) рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдкрдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг

  • рд░реВрдмреА рд╕рдВрд╕реНрдХрд░рдг: 2.6
  • rspec- рдХреЛрд░ рд╕рдВрд╕реНрдХрд░рдг: 3.9.0

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

module Foo
  def something
    puts 'hi'
  end
end

RSpec.configure do |config|
  config.extend(Foo)
end

RSpec.shared_context 'shared' do
  something
end

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

рдкреНрд░рд┐рдВрдЯ 'рд╣рд╛рдп'

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

something рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЙрд╕ рд╕рд╛рдЭрд╛ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ:

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 рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╕реНрдкреЗрдХреНрд╕ / рдлреАрдЪрд░реНрд╕ рдлреЗрд▓ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

andyl picture andyl  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gaganawhad picture gaganawhad  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

1c7 picture 1c7  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mlapierre picture mlapierre  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ankit8898 picture ankit8898  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ