如果任何网址中存在特定的引荐变量,我的控制器将设置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?
(编辑:括号)
答案 0 :(得分:0)
你想要那个@response。您正在尝试访问本地而不是全局变量,这就是为什么它会向您返回未定义的名称错误。我见过的其他例子
@response.cookies
得到它。然后,您可以通过哈希
访问它来提取所需内容 testCookies = @response.cookies.to_hash
cookie = testCookies['somecookie']
然后你可以用它返回任何你想要的东西。我注意到在Rails版本5上,您应该在本地定义此变量,并且只需使用&#39; cookies即可访问它。不需要@request部分。
答案 1 :(得分:-1)
根据我的理解,不应在集成测试中测试cookie。在调试器集成测试期间检查设置的值显示响应对象为nil且cookie设置为空。我的解决方案是分别编写控制器规范以检查是否设置了cookie,并测试集成规范中的其余行为。 加上relish cookies section明确指出,控制器规范公开了访问cookie的方法。