Metode yang disuntikkan melalui config.extend(...)
tidak ditentukan saat dipanggil dalam konteks bersama.
module Foo
def something
puts 'hi'
end
end
RSpec.configure do |config|
config.extend(Foo)
end
RSpec.shared_context 'shared' do
something
end
Mencetak 'hai'
something
tidak ditentukan
Bisakah Anda memberikan sedikit lebih banyak konteks tentang bagaimana Anda menggunakan konteks bersama itu? Saya tidak dapat mereproduksi perilaku ini:
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
keluaran:
$ 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
Saya akan menutup ini untuk saat ini dan menyelidiki apa yang salah pada akhirnya. Terima kasih atas tanggapannya. Akan melaporkan kembali ketika saya mengetahuinya.
Saya pikir masalahnya terjadi ketika menyertakan konteks di dalam blok konfigurasi:
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
keluaran:
$ 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 Saya telah membuka kembali masalah ini sejak @tubaxenor memberikan contoh yang gagal.
Terima kasih atas contoh reproduksinya.
Saya menduga itu adalah perintah penyertaan. Poin debug cepat di lib/rspec/core/configuration.rb:1513
.
Masuk akal untuk memperpanjang pertama, dan memasukkan setelahnya. Dapatkah Anda memikirkan contoh yang baik ketika sebuah modul membutuhkan sesuatu yang didefinisikan dalam konteks bersama?
Anda dapat mencoba dengan menukar baris 1513 dan 1514 dan melihat apakah beberapa spesifikasi / fitur gagal.
Apakah Anda ingin mengatasi masalah dengan hati-hati?