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

Visit a page one time, but have separate it blocks in Capybara/RSpec

我正在 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 块时,我试图避免支付多次访问该页面的代价。

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