Ruby on rails 摩卡咖啡&x2B;黄瓜模仿网络反应

Ruby on rails 摩卡咖啡&x2B;黄瓜模仿网络反应,ruby-on-rails,unit-testing,cucumber,mocha.js,Ruby On Rails,Unit Testing,Cucumber,Mocha.js,以下是app/models/websites.rb class Masterpiece < ActiveRecord::Base validates_presence_of :title, :link validates_uri_existence_of :link, :allow_redirect => false end class杰作false 结束 第二个验证来自插件 下面是features/support/mocha.rb文件 require 'moch

以下是app/models/websites.rb

class Masterpiece < ActiveRecord::Base
    validates_presence_of :title, :link
    validates_uri_existence_of :link, :allow_redirect => false
end
class杰作false
结束
第二个验证来自插件

下面是features/support/mocha.rb文件

require 'mocha'
World(Mocha::API)

Before do
  mocha_setup
  @http_mock = mock('Net::HTTPResponse')
  @http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => '<title>Test</title><body>Body of the page</body>')
  Net::HTTP.expects(:get_response).returns(@http_mock)
  #Website.expects(:validates_uri_existence_of).returns(true)
end

After do
  begin
    mocha_verify
  ensure
    mocha_teardown
  end
end
需要“摩卡”
世界(摩卡::API)
在做之前
摩卡咖啡机
@http_mock=mock('Net::HTTPResponse')
@http_mock.stubs(:code=>'200',:message=>“OK”,:content_type=>“text/html”,:body=>“页面的TestBody”)
Net::HTTP.expected(:get\u response)。返回(@HTTP\u mock)
#expected(:验证uri是否存在)。返回(true)
结束
事后
开始
摩卡咖啡
确保
摩卡迪尔敦酒店
结束
结束
但是当我尝试运行cucumber功能时,它会尝试创建记录,在保存上述插件之前,它会尝试通过网络检查以获得响应。很好。
但当我想在测试环境中模拟它时,我会尝试使用mocha


我应该如何编写代码来模拟净响应或类方法来顺利运行测试???

模拟需要使用正确的类。尝试:

Net::HTTP.expects(:get_response).returns(Net::HTTPSuccess.allocate)

(实例化一个类而不调用initialize)

模拟需要是正确的类。尝试:

Net::HTTP.expects(:get_response).returns(Net::HTTPSuccess.allocate)

(在不调用initialize的情况下实例化一个类)

我建议使用它,因为它非常适合。

我建议使用它,因为它非常适合。

嗯,我按照您的建议更改了support/mocha.rb文件。在执行mocha_setup Net::HTTP.expects(:get_response)之前,返回(Net::HTTPSuccess.allocate)end,但现在当我运行该功能时,显示以下错误!并非所有的期望都得到满足未满足的期望:-仅期望一次,尚未调用:Net::HTTP.get\u response(任何\u参数)(Mocha::ExpectationError)不知道为什么不调用它。如果不希望总是被调用,则应使用
存根
而不是预期(相同的作业,未触发时不会导致失败)。听起来,FakeWebFoo(正如@Radar提到的)是一个更好的解决方案。低水平的嘲笑几乎总是会让人头疼。谢谢。我只是在代码末尾添加了。最多(4)个,就这样解决了这个问题,它成功了。但我仍然不满意这个解决方案。在投入摩卡咖啡之前,我查看了伪造的网页,但没有找到那行代码来取代摩卡咖啡。你能不能给我一行代码,让这项工作使用伪造的网络?先生,你应该得到一块饼干!嗯,我按照您的建议更改了support/mocha.rb文件。在执行mocha_setup Net::HTTP.expects(:get_response)之前,返回(Net::HTTPSuccess.allocate)end,但现在当我运行该功能时,显示以下错误!并非所有的期望都得到满足未满足的期望:-仅期望一次,尚未调用:Net::HTTP.get\u response(任何\u参数)(Mocha::ExpectationError)不知道为什么不调用它。如果不希望总是被调用,则应使用
存根
而不是预期(相同的作业,未触发时不会导致失败)。听起来,FakeWebFoo(正如@Radar提到的)是一个更好的解决方案。低水平的嘲笑几乎总是会让人头疼。谢谢。我只是在代码末尾添加了。最多(4)个,就这样解决了这个问题,它成功了。但我仍然不满意这个解决方案。在投入摩卡咖啡之前,我查看了伪造的网页,但没有找到那行代码来取代摩卡咖啡。你能不能给我一行代码,让这项工作使用伪造的网络?先生,你应该得到一块饼干+1.我试图记起这是什么要求我的答案。我试图记起这是什么要求我回答的。