Rspec-core: Le contexte partagé ne fonctionne pas avec les méthodes étendues

Créé le 16 déc. 2019  ·  5Commentaires  ·  Source: rspec/rspec-core

Objet du problème

Les méthodes qui ont été injectées via config.extend(...) ne sont pas définies lorsqu'elles sont appelées dans des contextes partagés.

Votre environnement

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

Étapes à suivre pour reproduire

module Foo
  def something
    puts 'hi'
  end
end

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

RSpec.shared_context 'shared' do
  something
end

Comportement attendu

Imprime «salut»

Comportement réel

something n'est pas défini

Bug

Tous les 5 commentaires

Pouvez-vous s'il vous plaît fournir un peu plus de contexte sur la façon dont vous utilisez ce contexte partagé? Je ne parviens pas à reproduire ce comportement:

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

les sorties:

$ 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

Je vais clore ça pour l'instant et enquêter sur ce qui ne va pas de mon côté alors. Merci pour la réponse. Je ferai rapport quand je le découvrirai.

Je pense que le problème se produit lorsque vous incluez le contexte dans le bloc de configuration:

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

les sorties:

$ 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 J'ai rouvert le problème depuis que @tubaxenor a fourni l'exemple défaillant.

Merci pour l'exemple de reproduction.
Je soupçonne que c'est l'ordonnance d'inclusion. Points de débogage rapide à lib/rspec/core/configuration.rb:1513 .

Il est logique d'étendre d'abord et d'inclure ensuite. Pouvez-vous penser à un bon exemple où un module aurait besoin de quelque chose qui est défini dans le contexte partagé?

Vous pouvez essayer d'échanger les lignes 1513 et 1514 et voir si certaines spécifications / fonctionnalités échouent.

Voulez-vous aborder le problème avec soin?

Cette page vous a été utile?
0 / 5 - 0 notes