1

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

subject {page}

我们可以omit从这个词,例如:

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

是什么subject?是什么page

另外,为什么要声明subject{}and it{}?我看到大括号(“{}”)在您声明散列时使用,例如:

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

2 回答 2

4

subject是一个rspec 方法,它采用一个块,该块将成为您的断言的隐含主题。page指(可能)Capybarapage对象,它在使用 Capybara 的 rspec 测试中可用,您已经完成了类似visit('/some/url').

于 2013-10-02T00:12:53.717 回答
2

我希望这段代码可以使它更清楚:

假设你有一堂课:

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

  def m
    @m
  end

  def n
    @n
  end
end

要测试该方法m返回正确的值,您可以将此代码与主题一起使用:

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你的帖子中的只是一个在测试代码的其他地方创建的对象。

于 2013-10-02T14:19:36.863 回答