我正在阅读Ruby on Rails Tutorial“,在有关Rspec测试的页面上,有这一行:
subject {page}
我们可以omit
来自,例如:
it { page.should have_content('Help') }
什么是subject
?什么是page
?
另外,为什么宣布subject{}
和it{}
?我看到大括号(“{}”)在你声明一个哈希时使用:
user = {name: 'Jhon', lastName: 'Smith'}
答案 0 :(得分:4)
subject
是一个rspec method,它接受一个块,它将是断言的隐含主题。 page
引用(可能)Capybara的page
对象,使用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
只是一个在测试代码中的其他地方创建的对象。