Rspec-core: Der gemeinsame Kontext funktioniert nicht mit erweiterten Methoden

Erstellt am 16. Dez. 2019  ·  5Kommentare  ·  Quelle: rspec/rspec-core

Thema der Ausgabe

Methoden, die über config.extend(...) injiziert wurden, werden beim Aufruf in gemeinsam genutzten Kontexten nicht definiert.

Ihre Umgebung

  • Ruby-Version: 2.6
  • rspec-core version: 3.9.0

Schritte zum Reproduzieren

module Foo
  def something
    puts 'hi'
  end
end

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

RSpec.shared_context 'shared' do
  something
end

Erwartetes Verhalten

Druckt 'hi'

Tatsächliches Verhalten

something ist undefiniert

Bug

Alle 5 Kommentare

Können Sie bitte etwas mehr Kontext dazu angeben, wie Sie diesen gemeinsamen Kontext verwenden? Ich kann dieses Verhalten nicht reproduzieren:

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

Ausgänge:

$ 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

Ich werde dies vorerst schließen und untersuchen, was dann an meinem Ende falsch ist. Danke für die Antwort. Werde zurückmelden, wenn ich es herausfinde.

Ich denke, das Problem tritt auf, wenn der Kontext in den Konfigurationsblock aufgenommen wird:

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

Ausgänge:

$ 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 Ich habe das Problem erneut geöffnet, da @tubaxenor das

Danke für das Reproduktionsbeispiel.
Ich vermute, dass es die Einschlussreihenfolge ist. Schnelle Debug-Punkte bei lib/rspec/core/configuration.rb:1513 .

Es ist sinnvoll, zuerst zu erweitern und danach einzuschließen. Können Sie sich ein gutes Beispiel vorstellen, wenn ein Modul etwas benötigt, das im gemeinsamen Kontext definiert ist?

Sie können versuchen, die Zeilen 1513 und 1514 auszutauschen, um festzustellen, ob einige Spezifikationen / Funktionen fehlschlagen.

Möchten Sie das Problem sorgfältig angehen?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen