Rspec-core: Konteks bersama tidak berfungsi dengan metode yang diperluas

Dibuat pada 16 Des 2019  ·  5Komentar  ·  Sumber: rspec/rspec-core

Subjek masalah

Metode yang disuntikkan melalui config.extend(...) tidak ditentukan saat dipanggil dalam konteks bersama.

Lingkungan Anda

  • Versi Ruby: 2.6.0
  • rspec-core versi: 3.9.0

Langkah-langkah untuk mereproduksi

module Foo
  def something
    puts 'hi'
  end
end

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

RSpec.shared_context 'shared' do
  something
end

Perilaku yang diharapkan

Mencetak 'hai'

Perilaku sebenarnya

something tidak ditentukan

Bug

Semua 5 komentar

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?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat