我正在使用Rails应用程序在Capybara中编写一些RSpec测试,我可以使用一些建议。我想加载应用程序的主页,然后测试页面上是否存在某些元素。要做到这一点,我写的是像
context "Logo is present" do
it "is configured properly" do
visit root_path
expect(page.find("a.logo")[:alt]).to have_content("blah")
expect(page.find("a.title")[:alt]).to have_content("title")
... 4 more expect lines here ...
end
end
我并不特别喜欢在同一个it
块中拥有一堆这些expect语句。我宁愿把它分开来做这样的事情:
context "Logo is present" do
before(:all) {visit root_path}
it "has a valid alt" do
expect(page.find("a.logo")[:alt]).to have_content("blah")
end
it "has a valid title" do
expect(page.find("a.title")[:alt]).to have_content("title")
end
... 4 more it lines here ...
end
问题是对before(:all) {visit root_path}
的调用。我曾希望在所有it
块之前运行一次。不幸的是,看起来Capybara在第一个it
块运行后撕下了页面,所以除了第一块之外,所有it
块都会失败。
我有没有办法一次访问一个页面,并且有多个使用该页面的it
块?我试图避免在单独it
块时多次支付访问该页面的价格。
答案 0 :(得分:1)
没有 - rspec测试的全部意义在于它们彼此隔离。此外,您所展示的测试类型看起来更像是应该是视图规格(水豚匹配器应该在视图规格中可用)而不是功能规格。