pup*_*eno 17 cookies session ruby-on-rails capybara
我想继续使用相同的会话,我的意思是Rails在Test::Unit
使用Capybara的各种集成测试之间的会话.Capybara::Session
在重新使用的所有测试中,该对象是相同的,但是当我在另一个测试中访问另一个页面时,我立即退出.
挖掘我发现capybara_session.driver.browser.manage.all_cookies
在一个测试和下一个测试之间被清除.
有什么想法?或为什么?或者如何避免它?
试图解决这个问题,我将cookie保存在一个类变量中,稍后通过运行重新添加:
capybara_session.driver.browser.manage.add_cookie(@@cookie)
Run Code Online (Sandbox Code Playgroud)
它似乎工作,cookie就在那里,但是当有一个请求时,cookie被替换为另一个,所以它没有任何效果.
有没有其他方法来实现这一目标?
Eri*_*son 15
在与页面交互的capybara代码之后添加以下内容:
Capybara.current_session.instance_variable_set(:@touched, false)
or
page.instance_variable_set(:@touched, false)
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,这些可能会有所帮助:
https://github.com/railsware/rack_session_access
http://collectiveidea.com/blog/archives/2012/01/05/capybara-cucumber-and-how-the-cookie-crumbles/
小智 5
如果您正在尝试将单个示例串联到一个故事(黄瓜样式,但没有黄瓜),您可以使用名为rspec-steps的gem来完成此任务.例如,通常这不起作用:
describe "logging in" do
it "when I visit the sign-in page" do
visit "/login"
end
it "and I fill in my registration info and click submit" do
fill_in :username, :with => 'Foo'
fill_in :password, :with => 'foobar'
click_on "Submit"
end
it "should show a successful login" do
page.should have_content("Successfully logged in")
end
end
Run Code Online (Sandbox Code Playgroud)
因为rspec回滚了它的所有实例变量,会话,cookie等.
如果你安装了rspec-steps(注意:目前与rspec比2.9不兼容),你可以用'steps'替换'describe',Rspec和capybara将保留示例之间的状态,允许你构建一个更长的故事,例如:
steps "logging in" do
it "when I visit the sign-in page" #... etc.
it "and I fill in" # ... etc.
it "should show a successful" # ... etc.
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7177 次 |
最近记录: |