如何创建带有对象参数的rspec方法

时间:2013-11-19 19:55:34

标签: ruby-on-rails ruby rspec

我只是想创建一个以对象作为参数的简单rspec方法。我可以做类似以下的事情:

  def check_it(p)
    before { visit p.full_path }
    page.should have_title("sample title")
    p.children.published.each do |pp|
      check_it(pp)
    end
  end

到目前为止,我甚至没有想出可以避免使用此代码的地方:

undefined method `check_it'

错误,除非我把它与其他rails帮助器放在一起,此时我得到了

undefined method `before' for main:Object (NoMethodError)

非常感谢一些帮助起步。

2 个答案:

答案 0 :(得分:1)

您可以在示例之外的rspec文件中的各个位置添加它。 E.g:

def check_it(p); puts p; end

describe 'foo' do
  def check_it2(p); puts p; end

  context 'bar' do
    def check_it3(p); puts p; end

    it 'does something' do
      check_it 'hello'
      check_it2 'world'
      check_it3 'wide'
    end
  end
end

还有一些方法可以将其添加到rspec文件之外,例如:将它放在spec/supportinclude中的文件中,放入目标rspec文件中。

答案 1 :(得分:1)

不知道其他人是怎么做的,但我添加了一个目录到spec并称之为支持,因为spec_helper包含这一行:

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

支持目录中的任何内容都将包含在每次运行中。

因此,您可以将此特定方法直接放在spec / support中的文件中,它可以调用,也可以将其包含在模块中,然后将该模块包含在您需要的位置。