Ruby on rails 当我在控制器中设置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"

我想测试控制器是否设置了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"
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
放进去时,上面的例子就起作用了。但是,它在我的主应用程序中仍然不起作用(这只是一个单独的示例)。