访问一个页面一次,但在 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 测试的全部意义在于它们彼此隔离。此外,您展示的测试类型看起来更像是视图规范(水豚匹配器应该在视图规范中可用)而不是功能规范。
我正在 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 测试的全部意义在于它们彼此隔离。此外,您展示的测试类型看起来更像是视图规范(水豚匹配器应该在视图规范中可用)而不是功能规范。