Ruby on rails 当我在控制器中设置cookie时,为什么';难道恶鬼没读过吗?
我想测试控制器是否设置了cookie。我有一个控制器Ruby on rails 当我在控制器中设置cookie时,为什么';难道恶鬼没读过吗?,ruby-on-rails,cookies,capybara,poltergeist,Ruby On Rails,Cookies,Capybara,Poltergeist,我想测试控制器是否设置了cookie。我有一个控制器 # app/controllers/home_controller.rb class HomeController < ApplicationController def index cookies[:foo] = "bar" head :ok end end # config/routes.rb Rails.application.routes.draw do root to: "home#index"
# app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
cookies[:foo] = "bar"
head :ok
end
end
# config/routes.rb
Rails.application.routes.draw do
root to: "home#index"
end
#app/controllers/home_controller.rb
类HomeController<应用程序控制器
def索引
cookies[:foo]=“条”
头:好的
终止
终止
#config/routes.rb
Rails.application.routes.draw do
根目录为:“主页#索引”
终止
当我写测试的时候
require "capybara/poltergeist"
class CookieTest < ActionDispatch::IntegrationTest
include Capybara::DSL
setup do
Capybara.current_driver = :poltergeist
end
test "cookies" do
visit "/"
page.driver.cookies #=> {}
end
end
要求“水豚/恶灵”
类CookieTest{}
终止
终止
cookie为空,即使
HomeController
设置了cookie。为什么呢?当我使用浏览器访问同一页面时,cookie确实被设置好了(我在JavaScript控制台中运行了document.cookie
)在本例中,我忘了输入test\u helper.rb
Capybara.app = MyApp::Application
在我的应用程序的真实示例中,我实际上是将Cucumber与RSpec一起使用,而不是MiniTest。我在测试GitHub身份验证。问题是我正在重定向到
http://example.com
,而不是我的应用程序。Cookie是按域设置的,所以当我输入http://example.com
,我的应用程序的Cookie不再存在。您需要等待请求完成吗?Capybara代码(取决于驱动程序)可以是异步的-只是因为驱动程序方法返回并不总是意味着所有相关的内容都已完成。对于visit来说,可能是也可能不是,但要找到答案只需快速调用sleep即可。唯一可以异步的是JavaScript。每个水豚驱动程序总是在操作完成后返回。一件奇怪的事情是,当我把Capybara.app=MyApp::Application
放进去时,上面的例子就起作用了。但是,它在我的主应用程序中仍然不起作用(这只是一个单独的示例)。