1

如果任何 URL 中有特定的引用变量,我的控制器将设置一个 cookie。该 cookie 会导致许多我想使用集成规范测试的下游行为。如何访问 cookie?

尝试(失败)行为的示例:

describe "example cookie test" do
  before do
    visit home_path(:referal_variable => "123456")
  end

  it "sets the cookie" do
    response.cookies["referal_variable"].should == "123456"
  end
end

这将产生错误: NameError: undefined local variable or method `response' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_6::Nested_1::Nested_1:0x007fa8e73f78b0>

我已经看到控制器规范使用了该response方法,但它在这里不起作用......如何在集成测试中访问我的 cookie?

(编辑:括号)

4

2 回答 2

0

你想要那个@response。您正在尝试访问本地变量而不是全局变量,这就是为什么它会返回给您一个未定义的名称错误。我见过的其他例子

  @response.cookies

为拿到它,为实现它。然后你可以通过像哈希一样访问它来提取你需要的东西

    testCookies = @response.cookies.to_hash
    cookie = testCookies['somecookie']

然后你可以用它返回任何你想要的东西。我会注意到,在 Rails 版本 5 上,您应该在本地定义此变量,并且只需使用“cookies”即可访问它,而无需 @request 部分。

于 2017-01-25T23:16:08.963 回答
-1

据我了解,不应在集成测试中测试 cookie。使用调试器检查集成测试期间设置的值发现响应对象为 nil,cookie 设置为空。我的解决方案是单独编写控制器规范以检查是否设置了 cookie,并测试集成规范中的其余行为。Plus relish cookies 部分 明确指出,控制器规范公开了访问 cookie 的方法。

于 2013-12-28T05:47:03.447 回答