我的Rails 4应用程序中有许多remote: true
个表单来组成向导。
在每个post
处,操作会向我的控制器中的session
对象添加键。
#post :some_action
def some_action
current_form_indetifier = params[:current_form_indetifier]
session[current_form_indetifier] = 'some_data'
end
这在开发和生产中效果很好。
在我的Capybara Selenium测试中,SOMETIMES也能完美运行。
#step 1
fill_in 'My name is', with: 'Andy Smith'
fill_in 'I work at', with: 'Coca Cola'
find('.signup-form-next-button').click
#session key set in this post
wait_for_ajax
#step 2
fill_in 'Your Email', with: 'andy@smith.com'
fill_in 'Password', with: 'some-super-long-password'
find('.signup-form-next-button').click
#session key from last request is gone :-(
wait_for_ajax
非常重要的是要注意 有时会工作。
然而,对于大多数(70%)的时间,它在测试期间不起作用。
通过记录,我可以看到每个请求中的键/值都被添加到会话中,但是在下一个请求中,键不再出现在会话中。
#first request
puts session.keys => "['form_1']"
#second request
puts session.keys => "[]"
同样,这有效 。
在config.action_controller.allow_forgery_protection = true
中启用environments/test.rb
(默认情况下为假)
在protect_from_forgery with: :exception
application_controller.rb
重要的是要记住,有时工作。
有什么想法吗?
目前我已经通过使用ActiveRecord SessionStore解决了这个问题,所以看起来问题出在cookie周围。