当我在控制器中设置一个cookie时,为什么不能让Poltergeist读取它?

时间:2014-08-20 16:05:59

标签: 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"
end

当我写一个测试时

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

即使HomeController设置了Cookie,Cookie也是空白的。这是为什么?当我使用浏览器访问同一页面时,确实设置了cookie(我在JavaScript控制台中运行document.cookie)。

1 个答案:

答案 0 :(得分:0)

在这个例子中,我忘记输入test_helper.rb

Capybara.app = MyApp::Application

在我的应用程序的实际示例中,我实际上使用的是带有RSpec的Cucumber,而不是MiniTest。我正在测试GitHub身份验证。问题是我正在重定向到http://example.com,而不是我的应用。 Cookie是按域设置的,因此当我输入http://example.com时,我的应用程序的Cookie不再存在。