Rspec和Ruby语言中“subject {page}”的含义是什么?

时间:2013-10-01 23:38:25

标签: ruby-on-rails ruby rspec

我正在阅读Ruby on Rails Tutorial“,在有关Rspec测试的页面上,有这一行:

subject {page}

我们可以omit来自,例如:

it { page.should have_content('Help') }

什么是subject?什么是page

另外,为什么宣布subject{}it{}?我看到大括号(“{}”)在你声明一个哈希时使用:

user = {name: 'Jhon', lastName: 'Smith'}

2 个答案:

答案 0 :(得分:4)

subject是一个rspec method,它接受​​一个块,它将是断言的隐含主题。 page引用(可能)Capybarapage对象,使用Capybara进行rspec测试时可以使用visit('/some/url')

答案 1 :(得分:2)

我希望这段代码可以更清晰:

假设你有一个班级:

class A
  def initialize(m, n)
    @m = m
    @n = n
  end

  def m
    @m
  end

  def n
    @n
  end
end

要测试该方法m返回正确的值,您可以将此代码与subject:

一起使用
subject { A.new("lorem", "ipsum") }
specify { subject.m.should == "lorem" }
specify { subject.n.should == "ipsum" }

在上面的示例中,subject将是您在subject { A.new("lorem", "ipsum") }中创建的对象。

或者您可以使用这样的代码来缩短rspec示例:

subject { A.new("lorem", "ipsum") }
its(:n) { should == "lorem" }
its(:m) { should == "ipsum" }

你帖子中的page只是一个在测试代码中的其他地方创建的对象。