Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rspec 在请求规范中传递cookie_Rspec_Rspec2_Rspec Rails - Fatal编程技术网

Rspec 在请求规范中传递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请求时,我尝试使用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] # 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中,我们也在尝试如何做到这一点。