Saluti!
sto cercando di testare un metodo di controllo con Rspec che assomiglia a questo: 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
e il corrispondente spec si presenta così:
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
Quando il test viene eseguito, però, ottengo questo messaggio:
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)>'
ho sparso mette dichiarazioni durante il metodo di controllo come noi ll come metodo email_customer, quindi so che termina il suo corso e utilizza il metodo giusto, ma non sono sicuro del motivo per cui non ci riesce. Immagino sia uno stupido errore di sintassi di cui non sono sicuro. Grazie in anticipo per il vostro aiuto!
Scrivi la 'expect's _prima_ il' POST' –
ahh, in precedenza avevo provato a mettere entrambi gli aspetti prima del post, il che mi dava un errore riguardo l'assegnazione di @quote, ma con lo stub prima del post funzionava perfettamente! Grazie Signore! se lo fai una risposta lo accetterò – davidicus