【发布时间】: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