Methoden, die über config.extend(...)
injiziert wurden, werden beim Aufruf in gemeinsam genutzten Kontexten nicht definiert.
module Foo
def something
puts 'hi'
end
end
RSpec.configure do |config|
config.extend(Foo)
end
RSpec.shared_context 'shared' do
something
end
Druckt 'hi'
something
ist undefiniert
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?