Anrede!
Ich versuche, eine Controller-Methode mit Rspec zu testen, die wie folgt aussieht: Stubbing ActionMailer in Rspec
def email_customer
@quote = Quote.find(params[:quote_id])
hash = {
quote: @quote,
body: params[:email_body],
subject: params[:email_subject]
}
QuoteMailer.email_customer(hash).deliver
redirect_to edit_quote_path params[:quote_id]
end
und die entsprechende Spezifikation sieht wie folgt aus:
describe 'POST email_customer' do
let!(:quote) { create(:valid_quote) }
it 'assigns the quote and sends the customer an email' do
post :email_customer, quote_id: quote.id
expect(assigns(:quote)).to eq(quote)
expect(QuoteMailer).to receive(:email_customer).with(an_instance_of(Hash)).and_return(double('QuoteMailer', deliver: true))
end
end
Wenn der Test allerdings läuft, bekomme ich diese Nachricht:
Failure/Error: expect(QuoteMailer).to receive(:email_customer).with(an_instance_of(Hash)).and_return(double('QuoteMailer', deliver: true))
(<QuoteMailer (class)>).email_customer(an instance of Hash)
expected: 1 time with arguments: (#<RSpec::Matchers::AliasedMatcher:0x0000000c2b1e28 @description_block=#<Proc:[email protected]/home/david/.rvm/gems/ruby-2.1.1/gems/rspec-expectations-3.0.0.beta2/lib/rspec/matchers.rb:231 (lambda)>, @base_matcher=#<RSpec::Matchers::BuiltIn::BeAnInstanceOf:0x0000000c2b1e50 @expected=Hash>>)
received: 0 times with arguments: (#<RSpec::Matchers::AliasedMatcher:0x0000000c2b1e28 @description_block=#<Proc:[email protected]/home/david/.rvm/gems/ruby-2.1.1/gems/rspec-expectations-3.0.0.beta2/lib/rspec/matchers.rb:231 (lambda)>, @base_matcher=#<RSpec::Matchers::BuiltIn::BeAnInstanceOf:0x0000000c2b1e50 @expected=Hash>>)
# ./spec/controllers/quotes_controller_spec.rb:28:in `block (3 levels) in <top (required)>'
Ich habe puts Anweisungen in der Controller-Methode verstreut wie wir ll als die email_customer Methode, also weiß ich, dass es seinen Kurs und die richtige Methode am Laufen hält, aber ich bin nicht sicher, warum es das scheitert. Ich vermute es ist ein dummer Syntaxfehler, über den ich mir nicht sicher bin. Vielen Dank im Voraus für Ihre Hilfe!
schreiben Sie Ihre 'expect's _before_' die Post' –
ahh, ich hatte vorher versucht beides vor dem post zu setzen, was mir einen fehler bei der angabe von @quote gab, aber mit dem stub vor dem post funktionierte es einwandfrei! Danke mein Herr! Wenn Sie das eine Antwort machen, werde ich es akzeptieren – davidicus