Ruby on rails 如果AJAX调用未经授权,请将_重定向到登录页面
我有一个表单,当您单击Ruby on rails 如果AJAX调用未经授权,请将_重定向到登录页面,ruby-on-rails,ajax,cucumber,selenium-chromedriver,capybara,Ruby On Rails,Ajax,Cucumber,Selenium Chromedriver,Capybara,我有一个表单,当您单击submit时,它将发出一个AJAX调用来更新您想要更改的内容。我的用户会话将在4小时后过期,因此,如果用户希望更新表单,而他的会话在此期间已过期,则会显示一条闪光消息,要求重新加载页面并再次登录 尝试使用Cucumber、Capybara、Selenium和Chrome测试此行为时,由于未呈现flash消息,因此从未收到AJAX响应。(如果我手动测试,它工作得很好) 我已经运行了另一个测试,在执行另一个同样使用AJAX的操作时呈现flash消息,并且成功了。不同之处在于,
submit
时,它将发出一个AJAX调用来更新您想要更改的内容。我的用户会话将在4小时后过期,因此,如果用户希望更新表单,而他的会话在此期间已过期,则会显示一条闪光消息,要求重新加载页面并再次登录
尝试使用Cucumber
、Capybara
、Selenium
和Chrome
测试此行为时,由于未呈现flash消息,因此从未收到AJAX响应。(如果我手动测试,它工作得很好)
我已经运行了另一个测试,在执行另一个同样使用AJAX的操作时呈现flash消息,并且成功了。不同之处在于,一个操作会立即渲染视图,而失败的操作会重定向到另一个路径,然后进行渲染。所有控制器都继承自同一BaseController,该BaseController检查用户是否获得授权
会话到期后,我调用提交表单,该表单包含以下步骤:
When /^I submit the form$/ do
generic_form_page = GenericFormPage.new(Capybara.current_session)
generic_form_page.submit
if Capybara.current_session.mode == :poltergeist
ajax_page = GenericAjaxPage.new Capybara.current_session
ajax_page.wait_for_ajax_call_to_finish
else
Selenium::WebDriver::Wait.new(:timeout => 50)
end
sleep 5
end
等待\u ajax\u调用\u完成
基本上只是睡几秒钟
这是失败的操作:
def update
@element = Element.find(params[:id])
if @element.update_attributes(element_params)
render :json => { :location => another_path(@element.item) }
else
render :action => 'edit', :layout => false
end
end
正在进行的行动:
def edit
@element = Element.find(params[:id])
@item = @element.item
render :layout => false
end
AJAX消息如下:
handle_ajax_errors = (event, request, settings) ->
if request.status == 401
render_flash_error_message("Your session has timed out. Please refresh the page.")
else
render_flash_error_message("We're sorry. An error has occurred.")
这是我如何使cookies过期的:
browser = Capybara.current_session.driver.browser
if browser.respond_to?(:clear_cookies)
# Rack::MockSession
browser.clear_cookies
elsif browser.respond_to?(:manage) and browser.manage.respond_to?(:delete_all_cookies)
# Selenium::WebDriver
browser.manage.delete_all_cookies
else
raise "Don't know how to clear cookies. Weird driver?"
end
谢谢 您的test.log显示了与正在发出的请求相关的哪些内容?您在哪里/如何使测试中的会话过期?另外-
Selenium::WebDriver::Wait.new(:timeout=>50)
除了创建一个类Wait的ojbect,然后放弃之外,什么也不做it@ThomasWalpolelog没有说任何相关的内容,因为我正在测试的操作没有显示任何错误Selenium::WebDriver::Wait.new(:timeout=>50)
可能什么也做不了,但我尝试了sleep40
和failed@ThomasWalpole它在使用Firefox浏览器时有效,但在Chrome浏览器中无效。(但是我很难让firefox在CircleCI上工作,但是test.log是否显示重定向响应?它是否显示接收到的Ajax请求?它是否显示预期的请求/响应?您的test.log显示了与正在发出的请求相关的哪些内容?您在测试中的会话在哪里/如何过期?另外-Selenium::WebDriver::Wait.new(:timeout=>50)
除了创建一个类Wait的ojbect,然后放弃之外,什么都不做it@ThomasWalpoletest.log没有说任何相关的内容,因为我正在测试的操作没有显示任何错误。Selenium::WebDriver::Wait.new(:timeout=>50)
可能什么也做不了,但我尝试了睡眠40
和failed@ThomasWalpole它在使用Firefox浏览器时有效,但在Chrome浏览器中无效。(但是我很难让firefox在CircleCI上工作,但是test.log是否显示重定向响应?是否显示接收到的Ajax请求?是否显示预期的请求/响应?