Est-il un moyen de stub une méthode d'un module avec Rspec?

J'ai un module qui est inclus dans un autre module, et qu'ils mettent en œuvre la même méthode.
Je tiens à talon la méthode du module, quelque chose comme ceci:

module M
  def foo
    :M
  end
end

module A
  class << self
    include M

    def foo
      super
    end
  end
end

describe "trying to stub the included method" do
  before { allow(M).to receive(:foo).and_return(:bar) }

  it "should be stubbed when calling M" do
    expect(M.foo).to eq :bar
  end

  it "should be stubbed when calling A" do
    expect(A.foo).to eq :bar
  end
end

Le premier test est de passage, mais la seconde sorties:

Failure/Error: expect(A.foo).to eq :bar

   expected: :bar
        got: :M

Pourquoi n'est-ce pas le tampon de travail dans ce cas?
Est-il un autre moyen pour y parvenir?

Merci!

-------------------------------------Mise à JOUR----------------------------------

Merci! à l'aide de allow_any_instance_of(M) résolu celui-ci.
Ma prochaine question est - ce qui se passe si j'utilise ajouter et de ne pas inclure? voir le code suivant:

module M
  def foo
    super
  end
end

module A
  class << self
    prepend M

    def foo
      :A
    end
  end
end

describe "trying to stub the included method" do
  before { allow_any_instance_of(M).to receive(:foo).and_return(:bar) }

  it "should be stubbed when calling A" do
    expect(A.foo).to eq :bar
  end
end 

Ce temps, à l'aide de allow_any_instance_of(M) résultats dans une boucle infinie. pourquoi est-ce?

InformationsquelleAutor user3775153 | 2014-06-25