访问一次页面,但在Capybara / RSpec中将它分开

时间:2016-06-22 19:23:37

标签: rspec capybara

我正在使用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块时多次支付访问该页面的价格。

1 个答案:

答案 0 :(得分:1)

没有 - rspec测试的全部意义在于它们彼此隔离。此外,您所展示的测试类型看起来更像是应该是视图规格(水豚匹配器应该在视图规格中可用)而不是功能规格。