Ich versuche, Spezifikationen für einen Rails-Helfer zu schreiben. Dieser Helfer ruft eine Methode definiert in ApplicationController
und ausgesetzt durch helper_method
:Rails - Wie mock oder Zugriff auf Methoden in ApplicationController von Helper spec definiert?
app/Helfer/monkeys_helper.rb:
module MonkeysHelper
def current_monkey_banana_count
# current_monkey is defined in ApplicationController
current_monkey.present? ? current_monkey.banana_count : 0
end
end
app/controllers/application_controller.rb:
class ApplicationController < ActionController::Base
helper_method :current_monkey
protected
def current_monkey
@current_monkey ||= Monkey.find(session[:monkey_id])
end
end
Wenn ich current_monkey_banana_count
aus einer Ansicht aufrufen und über den Browser darauf zugreifen, funktioniert es gut. Aber wenn ich nenne es von einem spec wie folgt aus:
spec/Helfer/monkeys_helper_spec.rb:
RSpec.describe MonkeysHelper, type: :helper do
describe "#current_monkey_banana_count" do
it "returns 0 if there is no monkey" do
expect(helper.current_monkey_banana_count).to eq 0
end
end
end
Dann bekomme ich diesen Fehler, wenn ich die spec laufen:
NameError:
undefined local variable or method `current_monkey' for #<#<Class:0x007fe1ed38d700>:0x007fe1e9c72d88>
Rspec documentation sagt:
Um auf die Hilfsmethoden zuzugreifen, die Sie angeben, simpl y rufe sie direkt auf das Hilfsobjekt. HINWEIS: Hilfsmethoden, die in Controllern definiert sind, sind nicht enthalten.
Jede Idee, wie man entweder mock current_monkey
oder es von innen current_monkey_banana_count
sichtbar machen?
Danke!
Leider versagt diese mit ' nicht implementiert: current_monkey '. Anscheinend können Sie eine Methode nicht vortäuschen, die nicht definiert wird :( –