Rspec 在请求规范中传递cookie
在执行GET请求时,我尝试使用RSpec2和Rails3传递cookie 到目前为止,我已经尝试了以下方法Rspec 在请求规范中传递cookie,rspec,rspec2,rspec-rails,Rspec,Rspec2,Rspec Rails,在执行GET请求时,我尝试使用RSpec2和Rails3传递cookie 到目前为止,我已经尝试了以下方法 get "/", {}, {"Cookie" => "uuid=10"} # cookies[:uuid] is nil request.cookies[:uuid] = 10 # request is nil @request.env["Cookie"] = "uuid=10" # @request is nil helper.request.cookies[:uuid] # he
get "/", {}, {"Cookie" => "uuid=10"} # cookies[:uuid] is nil
request.cookies[:uuid] = 10 # request is nil
@request.env["Cookie"] = "uuid=10" # @request is nil
helper.request.cookies[:uuid] # helper is not defined
cookies[:uuid] = 10 # cookies[:uuid] is nil
controller.cookies[:uuid] = 10 # cookies is nil
有可能吗?我也遇到过类似的问题,但我没有找到合适的解决方案 缔约国表示,应当有可能:
# spec
request.cookies['foo'] = 'bar'
get :some_action
response.cookies['foo'].should eq('modified bar')
在我的规范中,在执行get之前,request总是nil
我现在在嘲笑饼干:
before { ActionDispatch::Request.any_instance.stubs(cookies: {locale: :en}) }
有类似的问题。根据,您可以在请求规范中使用cookies
方法:
before { cookies['foo'] = 'bar' }
我尝试了@phoet的解决方案,包括
ActionDispatch::Request.any_instance.stubs
,但它在RSpec 3.4中抛出了一个错误,并显示了一条看似无关的弃用消息。在spec/requests/some_spec.rb
中,您可以使用Rack::Test::Methods
来设置和读取cookies
describe 'Something' do
include Rack::Test::Methods
it 'can set cookies' do
set_cookie "foo=red"
post '/some/endpoint', params, headers
expect(last_request.cookies[:foo]).to eq('red')
end
end
文档:一开始我对你是如何做到这一点有点困惑,但实际上这很容易。在Rails的ActionDispatch::IntegrationTest内部(或者在rspec的情况下是a
:request
spec),您可以访问cookies变量
它的工作原理如下:
# set up your cookie
cookies["fruits"] = ["apple", "pear"]
# hit your endpoint
get fruits_path, {}, {}
# this works!
expect(cookies["fruits"]).to eq(["apple", "pear"])
在RSpec请求测试中对我有效的是显式传递HTTP Cookie头:
before do
get "/api/books", headers: { Cookie: "auth=secret" }
end
您链接到的文档用于控制器规格,而不是请求规格,这就是为什么
request
返回nil
。在RSpec3.4中,我们也在尝试如何做到这一点。