Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 水豚电子邮件重置会话_Ruby On Rails_Session_Devise_Cucumber_Capybara - Fatal编程技术网

Ruby on rails 水豚电子邮件重置会话

Ruby on rails 水豚电子邮件重置会话,ruby-on-rails,session,devise,cucumber,capybara,Ruby On Rails,Session,Devise,Cucumber,Capybara,在水豚注册后,我需要测试一个特定的智能重定向流。假设我的网站中有几个有趣的页面,我想在确认注册后将用户重定向到最后访问的有趣页面 小场景: When I visit the interesting page "42" And I visit a couple uninteresting pages # Note during the visit to other pages, session[:interesting_page] is correctly set to the url of pa

在水豚注册后,我需要测试一个特定的智能重定向流。假设我的网站中有几个
有趣的页面
,我想在确认注册后将用户重定向到最后访问的有趣页面

小场景:

When I visit the interesting page "42"
And I visit a couple uninteresting pages
# Note during the visit to other pages, session[:interesting_page] is correctly set to the url of page "42"
When I sign up and I confirm via the link in the email
# At this point I have lost the session[:interesting_page]
Then I should be confirmed and redirected to the last visited interesting page "42"
对于实际的实现,我决定选择
controller.session[]=
as。在呈现
页面“42”
的控制器中,我将会话设置为
会话[:interest\u page]=request.original\u url

在开发过程中,单击电子邮件中的确认链接后,我能够在设计确认期间成功地将_重定向到会话[:有趣的_页面]

但是,当我尝试使用Cucumber测试时,当单击电子邮件链接时,Capybara电子邮件似乎会重置会话,因此当我单击电子邮件中的链接重新连接时,
会话[:有趣的页面]
会被删除

当我注册并通过电子邮件中的链接确认时,编辑
步骤基本上通过一个设备注册控制器,我使用Capybara::email单击确认电子邮件

# Nested steps for "When I sign up and I confirm via the link in the email"
I fill in "email" with ...
...
I click "Sign up !"
Then I should see "Please confirm your account via the link !"
# At this stage session[:interesting_page] still exists and points to page "42"
And an email should have been sent to "#{user.email}"
And in the current mail I click "Je finalise mon inscription"

# The RegistrationController code I use is similar to devise and returns a pending_confirmation page
# respond_with resource, location: pending_confirmation_path


# Associated step implementations
Then(/an email should have been sent to "([^"]*)"/) do |address|
  open_email(address)
  expect(current_email).to be
end

When(/in the current mail I click "([^"]*)"$/) do |link|
  current_email.click_link link
end

水豚中的动作可以异步发生。这意味着,如果您没有检查页面上应该可见的内容,一旦您执行的任何操作完成,并调用另一个访问或操作,则可能无法设置响应该操作所设置的任何cookie,这意味着您实际上没有登录,或保存了一些重要数据。在您的情况下,这意味着在(至少)
我单击“注册!”
之后,您需要对成功注册后页面上出现的文本进行预期


要检查的另一件事是电子邮件中url的主机名(可能还有端口)是否与您正常访问时使用的url匹配

水豚中的动作可以异步发生。这意味着,如果您没有检查页面上应该可见的内容,一旦您执行的任何操作完成,并调用另一个访问或操作,则可能无法设置响应该操作所设置的任何cookie,这意味着您实际上没有登录,或保存了一些重要数据。在您的情况下,这意味着在(至少)
我单击“注册!”
之后,您需要对成功注册后页面上出现的文本进行预期


要检查的另一件事是电子邮件中url的主机名(可能还有端口)是否与您正常访问时使用的url匹配

当我注册时显示你的
,我通过电子邮件中的链接确认
步骤当我访问感兴趣的页面“42”
步骤时也显示
步骤-这些步骤在最后有期望,以确保页面实际加载,这一点很重要。如果没有这些期望,会话cookie可能永远不会在浏览器中设置。@ThomasWalpole我刚刚添加了步骤代码。此外,我还通过cucumber进行了检查,尝试在电子邮件步骤之前加载其他页面,会话确实已设置。当我注册时显示您的
,我通过电子邮件中的链接确认
步骤当我访问感兴趣的页面“42”时也显示
step-这些步骤的结尾要有预期,以确保页面实际加载,这一点很重要。如果没有这些期望,会话cookie可能永远不会在浏览器中设置。@ThomasWalpole我刚刚添加了步骤代码。此外,我还通过cucumber进行了检查,尝试在电子邮件步骤之前加载其他页面,会话确实设置好了。嘿,很抱歉,我已经有了类似的内容,只是觉得它没有那么重要。感谢大家的提醒,这也许可以解释我在其他测试中有时看到的其他不确定性失败xD@CyrilDuchon-Doris-是的,非常重要,这也是为什么总是使用“have_current_path”匹配器,而不是使用
eq
current_url
。我刚刚添加了另一个要检查的东西,因为Cookie是基于主机名(可能还有端口,取决于浏览器等)存储的。该死!请求主机从127.0.0.1更改为localhost,这可能解释了不同的会话id。。。。127.0.0.1是我单击任何电子邮件之前以及它成为本地主机之后的主机名。“我怎样才能把它统一起来呢?”西里尔公爵多丽丝说,“是的,这肯定能解释这一点。这意味着电子邮件中生成的url使用的是“localhost”而不是127.0.0.1-您可能需要在test.rb中配置
config.action\u mailer.default\u url\u options
,这可能需要将
Capyara.server\u端口
锁定到一个固定的端口号,以便您知道在默认的\u url\u选项中放置哪个端口。谢谢,我确实解决了
config.action\u mailer.default\u url\u options={host:'127.0.0.1',port:port\u由\u capybara使用}
。谢谢你的帮助。很抱歉,我已经有了这样的东西,只是觉得没那么重要。感谢大家的提醒,这也许可以解释我在其他测试中有时看到的其他不确定性失败xD@CyrilDuchon-Doris-是的,非常重要,这也是为什么总是使用“have_current_path”匹配器,而不是使用
eq
current_url
。我刚刚添加了另一个要检查的东西,因为Cookie是基于主机名(可能还有端口,取决于浏览器等)存储的。该死!请求主机从127.0.0.1更改为localhost,这可能解释了不同的会话id。。。。127.0.0.1是我单击任何电子邮件之前以及它成为本地主机之后的主机名。“我怎样才能把它统一起来呢?”西里尔公爵多丽丝说,“是的,这肯定能解释这一点。这意味着电子邮件中生成的url使用的是“localhost”而不是127.0.0.1-您可能需要在test.rb中配置
config.action\u mailer.default\u url\u options
,这可能需要锁定
Capyara.server_