引发 OpenURI::HTTPError 导致参数数量错误错误

发布于 2024-12-18 11:10:14 字数 447 浏览 0 评论 0原文

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

代码测试了这一特定行:

document = Nokogiri.HTML open(source_url)

并且在规范中我像这样存根它:

subject.stub(:open).and_raise(OpenURI::HTTPError)
subject.should_receive(:ended=).with(true)
subject.update_from_remote

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

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

I am testing how a method handles a 302 HTTPError exception. I tried to stub the one method call to raise one programmatically, however it keep complaining that wrong number of arguments error (0 for 2)

the code tested this particular line:

document = Nokogiri.HTML open(source_url)

and in the spec I stubbed it like this:

subject.stub(:open).and_raise(OpenURI::HTTPError)
subject.should_receive(:ended=).with(true)
subject.update_from_remote

I don't think it is related to Nokogiri.HTML() or Open-uri.open(), so why is this happening?

Also, how would I try to make this HTTPError as a 302 redirect error? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慕烟庭风 2024-12-25 11:10:14

我发现 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))

I found out that OpenURI::HTTPError's constructor requires two parameters. Rspec by default will call the error class's new method with no parameter, which cause this error. So I need to manually create an error object by passing the required parameters.

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))
全部不再 2024-12-25 11:10:14

这是一个很晚的回复,但对于其他可能会发现这有帮助的人:如果您使用 FakeWeb gem与 Nokogiri 结合使用,您可以进行此类测试,而无需深入了解代码的内部结构。您可以在测试中向 FakeWeb 注册一个 URI,并告诉它返回什么。例如:

FakeWeb.register_uri(:get, 'http://www.google.com', :status => ['404', 'Not Found'])

您提供的 URI 参数需要与您的方法正在调用的 URI 相匹配。然后 FakeWeb 将拦截该调用,并返回您提供的状态。

This is a very late reply, but for others who may find this helpful: if you use the FakeWeb gem in conjunction with Nokogiri, you can do this kind of testing without having to get so involved with the internals of the code. You can register a URI with FakeWeb in your test, and tell it what to return. For example:

FakeWeb.register_uri(:get, 'http://www.google.com', :status => ['404', 'Not Found'])

The URI argument you provide needs to match the URI your method is calling. FakeWeb will then intercept the call, and return the status you provide.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文