我想测试一个控制器设置一个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
)。
答案 0 :(得分:0)
在这个例子中,我忘记输入test_helper.rb
Capybara.app = MyApp::Application
在我的应用程序的实际示例中,我实际上使用的是带有RSpec的Cucumber,而不是MiniTest。我正在测试GitHub身份验证。问题是我正在重定向到http://example.com
,而不是我的应用。 Cookie是按域设置的,因此当我输入http://example.com
时,我的应用程序的Cookie不再存在。