Zwroty!
Próbuję przetestować metodę kontrolera z RSpec, który wygląda tak: Stubbing ActionMailer w 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
i odpowiadająca specyfikacji wygląda następująco:
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
Kiedy test przebiega jednak uzyskać ta wiadomość:
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)>'
Mam rozproszone umieszcza oświadczenia w całej metody kontrolera, jak my Będę jako metoda email_customer, więc wiem, że kończy się to jego biegiem i używa właściwej metody, ale nie jestem pewien, dlaczego to się nie udało. Zgaduję, że to głupi błąd w składni, którego nie jestem pewien. Z góry dziękuje za twoją pomoc!
napisać swój 'expect's _before_ Opcja' Post' –
ahh, wcześniej próbowałem wystawić obydwa oczekiwania przed postem, co dało mi błąd co do przypisania @quote, ale z wyprzedzeniem przed postem działało bezbłędnie! Dziękuję Panu! jeśli podasz tę odpowiedź, przyjmuję to: – davidicus