【问题标题】:How to make a stub return a hash value如何使存根返回哈希值
【发布时间】:2013-10-11 09:16:55
【问题描述】:

我有一个模型和一个方法,定义如下:

class Farm < ActiveRecord::Base
   def flags
    #has other code which returns a flag_details hash eg:
    # flag_details['flag1'] = true;
    # flag_details['flag2'] = false;
  end

end

现在我需要编写一个测试来验证是否根据设置/取消设置的标志显示特定的 div。我想写一个存根来返回这些标志,然后测试页面是否显示正确的 div。如何更正以下代码,以获得我想要的:

  scenario "display div named flower when flag1 or flag2 is false" do
    farm.stub(:flags).and_return("flag1" => false, "flag2" => false)
    if !farm.flags['flag1'] || !farm.flags['flag2']
      expect(page).to have_selector('div.flower', text: "4" )
    end    
  end

我是 ruby​​、rails 和 rspec 的初学者,所以任何帮助都会很棒。我也尝试使用以下方法,但没有奏效:

farm.stub(:flags[]).with('flag1').and_return(false)
farm.stub(:flags[]).with('flag2').and_return(false)

我还检查了此文档 (https://www.relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs),但没有得到我的答案。非常感谢任何其他可能对此有所帮助的链接!

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    我认为您应该能够将返回值包装在花括号 ({}) 中,它应该可以解决您的问题:

    farm.stub(:flags).and_return({"flag1" => false, "flag2" => false})
    

    【讨论】:

      【解决方案2】:

      首先,去掉测试中的 if 条件。没有理由将控制流添加到测试中。存根的工作原理:您的测试需要调用 that 农场对象的 flags 方法,它将返回您指定的哈希值。让您的场景访问相关页面,然后检查以确保预期行为符合您的预期。

      【讨论】:

      • 这是一个很好的观点,我将按照这个指南进行更改。对于我的问题,我将不得不接受@theTRON 给出的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2021-06-16
      • 1970-01-01
      • 2013-08-20
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多