引发OpenURI :: HTTPError会导致错误的参数错误

lul*_*ala 3 ruby open-uri rspec exception

我正在测试一个方法如何处理302 HTTPError异常.我试图将一个方法调用存根以编程方式引发一个,但是它继续抱怨错误的参数数量错误(0表示2)

代码测试了这个特定的行:

document = Nokogiri.HTML open(source_url)
Run Code Online (Sandbox Code Playgroud)

在规范中,我将其描述为:

subject.stub(:open).and_raise(OpenURI::HTTPError)
subject.should_receive(:ended=).with(true)
subject.update_from_remote
Run Code Online (Sandbox Code Playgroud)

我不认为它与Nokogiri.HTML()或Open-uri.open()有关,为什么会发生这种情况呢?

另外,我如何尝试将此HTTPError作为302重定向错误?谢谢

lul*_*ala 6

我发现OpenURI :: HTTPError的构造函数需要两个参数.默认情况下,Rspec将调用错误类的新方法,不带参数,这会导致此错误.所以我需要通过传递所需的参数手动创建一个错误对象.

exception_io = mock('io')
exception_io.stub_chain(:status,:[]).with(0).and_return('302')          
subject.stub(:open).with(anything).and_raise(OpenURI::HTTPError.new('',exception_io))
Run Code Online (Sandbox Code Playgroud)