首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用rspec模拟open-uri?

如何使用rspec模拟open-uri?
EN

Stack Overflow用户
提问于 2012-05-29 18:05:29
回答 4查看 7.4K关注 0票数 16

我有这个简单的代码,其中我发送http请求和读取所有的响应。以下是我的rails代码

代码语言:javascript
复制
open("http://stackoverflow.com/questions/ask")

我该如何为这行代码编写规范呢?我没有选择使用mocha和webmock。我只能使用Rpsec的mocking框架。

我试着用这句话

代码语言:javascript
复制
OpenURI.stub!(:open_uri).should_receive(:open).with("http://stackoverflow.com/questions/ask")

但是我一直收到这个错误

代码语言:javascript
复制
RSpec::Mocks::MockExpectationError: (#<RSpec::Mocks::MessageExpectation:0xd1a7914>).open("http://stackoverflow.com/questions/ask")
expected: 1 time
received: 0 times
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-29 16:41:09

我以为open方法是在Kernel级别定义的,但我错了。

如果你想模拟open,你应该在你的object的级别上这样做:

代码语言:javascript
复制
it "should do something" do
  object_under_test = ObjectUnderTest.new
  object_under_test.should_receive(:open).with("http://example.org")
end
票数 19
EN

Stack Overflow用户

发布于 2013-01-19 01:06:21

根据此链接,http://distillations.2rye.com/2011/08/mock-the-web-openuri/函数在内核模块上定义,但混合到您的控制器中。因此,您需要在该级别上对调用进行存根。此解决方案适用于RSpec控制器测试:

代码语言:javascript
复制
  html_content = <<-EOS
          <html><head>
           <title>Some Title</title>
          </head>
          <body>Some Content</body></html>
        EOS

  YourController.any_instance.stub(:open).and_return html_content
票数 2
EN

Stack Overflow用户

发布于 2013-10-16 04:48:50

我做到了:

代码语言:javascript
复制
my_object.stub_chain(:open, :read) { "my return value" }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10796986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档