我正在阅读Ruby on Rails 教程“,在有关 Rspec 测试的页面上,有这一行:
subject {page}
我们可以omit从这个词,例如:
it { page.should have_content('Help') }
是什么subject?是什么page?
另外,为什么要声明subject{}and it{}?我看到大括号(“{}”)在您声明散列时使用,例如:
user = {name: 'Jhon', lastName: 'Smith'}
我正在阅读Ruby on Rails 教程“,在有关 Rspec 测试的页面上,有这一行:
subject {page}
我们可以omit从这个词,例如:
it { page.should have_content('Help') }
是什么subject?是什么page?
另外,为什么要声明subject{}and it{}?我看到大括号(“{}”)在您声明散列时使用,例如:
user = {name: 'Jhon', lastName: 'Smith'}
subject是一个rspec 方法,它采用一个块,该块将成为您的断言的隐含主题。page指(可能)Capybara的page对象,它在使用 Capybara 的 rspec 测试中可用,您已经完成了类似visit('/some/url').
我希望这段代码可以使它更清楚:
假设你有一堂课:
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你的帖子中的只是一个在测试代码的其他地方创建的对象。