我正在尝试在rspec中组合一个运行测试:
feature "Happy Path", js:true do
before(:all) do
@user = create(:user)
@object = create(:object, account: @object.account)
sign_in @user
end
describe "test" do
context "test" do
include_examples "it_will_expand_the_menu"
include_examples "it_will_navigate_to_the_object" do
let(:object) {@object.name}
end
end
end
并定义了共享示例:
shared_examples "it_will_expand_the_menu" do
it "expands menu" do
...
...
end
end
shared_examples "it_will_navigate_to_the_object" do
it "fills in the country" do
click_on object
end
end
第一个测试通过菜单扩展,但是在两个测试之间,浏览器刷新并导航到空白HTML页面,然后RSpec出错
Failure/Error: click_on object
Capybara::ElementNotFound:
Unable to find link or button "Bicycle"
发生了什么事?为什么RSpec重置上下文,即使我认为include_examples维护当前上下文?我该如何解决这个问题?
答案 0 :(得分:0)
事实证明这是一个水豚问题。
Capybara :: Session定义了以下方法:
def reset!
driver.reset! if @touched
@touched = false
raise @server.error if Capybara.raise_server_errors and @server and @server.error
ensure
@server.reset_error! if @server
end
alias_method :cleanup!, :reset!
alias_method :reset_session!, :reset!
每次测试后spec_helper执行@session.reset_session!
因此,通过附加以下内容:
module Capybara
class Session
def reset!
return nil
end
end
end
到我的配置文件的顶部,可以防止这种行为。