【问题标题】:When I set a cookie in the controller, why can't Poltergeist read it?当我在控制器中设置 cookie 时,为什么 Poltergeist 无法读取它?
【发布时间】:2014-10-14 02:12:36
【问题描述】:

我想测试控制器是否设置了 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

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

【问题讨论】:

  • 是否需要等待请求完成?
  • Capybara 代码(取决于驱动程序)可以是异步的——仅仅因为驱动程序方法返回并不总是意味着所有相关的东西都已完成。访问可能会也可能不会,但只需快速打个电话就可以睡觉了
  • 唯一可以异步的是 JavaScript。每个 Capybara 司机总是在行动完成后返回。一件奇怪的事情是当我输入Capybara.app = MyApp::Application 时,上面的例子就可以工作了。但是,它在我的主应用程序中仍然不起作用(这只是一个孤立的示例)。

标签: ruby-on-rails cookies capybara poltergeist


【解决方案1】:

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

Capybara.app = MyApp::Application

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

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2013-04-10
    • 1970-01-01
    • 2014-02-08
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2019-05-26
    相关资源
    最近更新 更多