Ich habe ein Modell wie folgt aus:Wie Stempeln nicht ActiveRecord-Modelle in Rails?
class Thing
class << self
def do_stuff(param)
result1 = method_one(param)
result2 = method_two(result1)
end
def method_one(param)
# tranformation
end
def method_two(result1)
# transformation
end
end
end
Wie kann ich testen, ob do_stuff
richtig die Methoden der method_one
und method_two
mit den richtigen Argumenten ausgeführt wird? Ich habe mock_model/mock_class ausprobiert, aber diese ergeben keinen Sinn für mich. Ich habe die Dokumentation gelesen, aber es fällt mir immer noch schwer, einen Sinn darin zu finden.
Mein Test sieht wie folgt aus:
require 'rails_helper'
RSpec.describe Thing, type: :model do
let!(:param) { create(:param) }
describe '#do_stuff' do
thing = double('thing')
expect(thing).to receive(:method_one).with param
thing.do_stuff param
end
end
Warum funktioniert das nicht? Der Fehler, den ich erhalte, ist, dass das Ding einen unerwarteten Nachrichtenparameter empfangen hat. Aber es war ziemlich erwartet und das war der Test. Wo gehe ich falsch?
genau. Um es sukzessiver zu formulieren, müssen Klassenmethoden gegen die Klasse und nicht gegen die Instanz gestempelt werden. – jaydel
Ausgezeichnet danke! Das macht Sinn (schätzen Sie auch, dass Sie sich die Zeit nehmen, den Test zu machen!). – user3162553