@status
ブロックのパフォーマンスに基づいて、オブジェクトのインスタンス変数を更新しようとしています。このブロックは、別のクラスへの呼び出しも行います。
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