Я пытаюсь обновить переменную экземпляра @status
на объекте, основанном на производительности блока. Этот блок также вызывает вызовы в другой класс.Выполнение исключения, но оценка обычно (RSpec)
def run
@entries.keep_if { |i| valid_entry?(i) }.each do |e|
begin
unique_id = get_uniqueid e
cdr_record = Cdr.find_by_uniqueid(unique_id).first
recording = cdr_record.nil? ? NullAsteriskRecording.new : AsteriskRecording.new(cdr_record, e)
recording.set_attributes
recording.import
rescue Exception => e
fail_status
end
end
end
fail_status
частный метод, который обновляет переменную экземпляра в :failed
. Пробивая некоторые другие вещи, я в основном проверял, работает ли этот код, но я хочу, чтобы тест был на месте. В настоящее время у меня есть следующее:
context "in which an exception is thrown" do
before do
@recording = double("asterisk_recording")
@recording.stub(:import).and_raise("error")
end
it "should set #status to :failed" do
# pending "Update instance variable in rescue block(s) of #run"
subject.run
subject.status.should eq :failed
end
end
Но тест всегда терпит неудачу. Блок rescue
никогда не оценивается (я проверил с оператором puts
, который будет оцениваться, когда я жестко запрограммирован в операторе raise
). Здесь я использую функцию double
? Или я делаю сам, удалив исключение, поэтому блок rescue
никогда не запускается?
Удачи, было бы так просто. Благодаря! Объяснение было замечательным. –