ruby-on-rails – Rspec:在路由规范中添加一些头部请求

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rspec:在路由规范中添加一些头部请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用具有 JSON格式的REST API的Rails应用程序,并且版本(根据这个优秀的Ryan的演员: http://railscasts.com/episodes/350-rest-api-versioning).

例如,有一个spec / requests规范:

require 'spec_helper'

describe "My Friends" do
  describe "GET /my/friends.json" do
    it "should get my_friends_path" do
      get v1_my_friends_path,{},{'HTTP_ACCEPT' => 'application/vnd.myapp+json; level=1'}
      response.status.should be(401)
    end
  end
end

它工作得很好但是(保留这个例子)我们如何编写路由规范?例如这个规范是不正确的:

require 'spec_helper'

describe "friends routing" do
  it "routes to #index" do
    get("/my/friends.json",nil,{'HTTP_ACCEPT' => 'application/vnd.myapp+json; level=1'}).
      should route_to({ action: "index",controller: "api/v1/private/my/friends",format: "json" })
  end
end

我尝试了不同的方式(如request.headers [‘Accept’]和@ request.headers [‘Accept’],其中请求未定义,@request为nil);我真的看不到怎么办

我在Ruby 1.9.3,Rails 3.2.6和rspec-rails 2.11.0.谢谢.

解决方法

通过结合Cristophe和Piotr答案的想法,我想出了一个为我工作的解决方案.我正在使用rspec和rails 3.0.
it 'should route like i want it to' do 
  Rack::MockRequest::DEFAULT_ENV["HTTP_ACCEPT"] = "*/*"
  {get: "/foo/bar"}.
    should route_to(
    controller: 'foo',action: 'bar',)
  Rack::MockRequest::DEFAULT_ENV.delete "HTTP_ACCEPT"
end

猜你在找的Ruby相关文章