rspec 3 - stub eine Klassenmethode


94

Ich aktualisiere von rspec 2.99 auf rspec 3.0.3 und habe Instanzmethoden für die Verwendung konvertiert allow_any_instance_of, aber nicht herausgefunden, wie eine Klassenmethode gestoppt werden kann. Ich habe folgenden Code:

module MyMod
  class Utils
    def self.find_x(myarg)
      # Stuff
    end
  end
end

und mein rspec 2 Test macht das:

MyMod::Utils.stub(:find_x).and_return({something: 'testing'})

Wie geht das mit Rspec 3?

Antworten:


171

Du solltest tun

allow(MyMod::Utils).to receive(:find_x).and_return({something: 'testing'})

Schauen Sie sich die doco Method Stubs an .


Ich versuche dies zu implementieren, aber wenn ich diesen Mock schreibe und dann schreibe, expect(Class.foo).to eq(bar)erhalte ich einen "Fehler mit der falschen Anzahl von Argumenten", weil die fooMethode normalerweise 2 Argumente will ... aber ich möchte nur, dass sie zurückgibt, was ich in den Stub gesetzt habe
Sixty4bit

FWIW, dieses Formular würde meinen Ruby-Interpreter zum Absturz bringen. And_return wird jedoch nicht unbedingt benötigt und kann weggelassen werden. (Mein Ruby-Interpreter stürzt auch nicht ab.)
Ray Fix

2
@ sixty4bit Gibt es einen Grund, warum du es nicht mit Argumenten aufrufen kannst?
David Moles

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.