我有以下測試:RSpec的消息的期望沒有得到滿足,但方法被稱爲
describe "Exporter#get_method" do
before(:each) do
exporter.should_receive(:get_method).at_least(:once).and_call_original
end
it "should get the next terminal value" do
exporter.send(:get_method).should == :split
end
it "should call descend if the current value is a hash" do
exporter.should_receive(:descend).once
2.times { exporter.send(:get_method) }
end
it "should call ascend if at the end of an array and there is a prologue" do
exporter.should_receive(:ascend).once
3.times { exporter.send(:get_method) }
end
end
我可以用一對夫婦binding.pry的驗證調用升降被調用。但RSpec沒有看到它。我哪裏錯了。我想確保正在測試的方法在正確的情況下調用其他方法。有沒有另一種方法來做到這一點?
沒有骰子。在具體的塊中,我得到了與call_original相同的失敗。這是一種私人方法。不過,我想通過測試,以便我知道未來是否會破壞測試。要麼通過改變其作出決定的條件,要麼通過修改方法而不意識到我也修改了行爲。 – LeakyBucket
文件中是否還有其他存根(可能位於頂部)?這個陷阱會讓你經常... – Gabe
不是,只有兩個let語句:let(:exporter){Export :: Exporter.new'data',[:split,{:to_s => [:split] }]} let(:formats){{:xls => Export :: Formatters :: XLSFormatter,:csv => Export :: Formatters :: CSVFormatter}} – LeakyBucket