У меня RSpe c, которые ожидают возникновения какого-то исключения. Однако при вызове метода я получил ошибку: expected Exception but nothing was raised
мой код:
require 'rails_helper'
RSpec.describe ReportMailer, type: :mailer do
let(:csv_file) { "data\n1\n2" }
let(:filename) { 'dummy.csv' }
let(:options) do
{
filename: filename,
to: user.email,
subject: "Transaction Report - #{filename}"
}
end
it 'raise error' do
expect do
ReportMailer.notify(options, nil)
end.to raise_error(SomeExceptions::InvalidFile)
end
end
Проблема в том, что если я просто использую обычный вызов expect
, скажем,
expect(described_class.notify(dummy_options, nil)).to eq 1
RSpe c показать ошибку / ошибку, которую я ожидаю раньше:
Failures:
1) ReportMailer raise error
Failure/Error: raise SomeExceptions::InvalidFile
SomeExceptions::InvalidFile:
The file is invalid
# ./app/mailers/report_mailer.rb:5:in `notify'
# ./spec/mailers/report_mailer_spec.rb:37:in `block (2 levels) in <top (required)>'
Мой метод уведомления приведен ниже:
require 'some_cms_exceptions'
class ReportMailer < ApplicationMailer
def notify(options, csv)
binding.pry
raise SomeExceptions::InvalidFile
validate(options)
attachments[options[:filename]] = { mime_type: 'text/csv', content: csv }
mail(to: options[:to], subject: options[:subject])
end
private
def validate(options)
raise SomeExceptions::InvalidMailOptions unless !options[:to].blank? && !options[:filename].blank?
end
end
Затем я поставил binding.pry
в методе уведомления и обнаружил, что: если мы используем expect
блок, то есть expect.{...}.to
, метод уведомления не выполняется. Но если мы используем обычный expect
, то есть expect(...).to
, выполняется метод уведомления.
Могу ли я знать, почему он так себя ведет? Потому что другие вопросы SO показали, что он работает с использованием блока ожидаемых.
Спасибо