测试 – Rspec Rails 3.1集成测试.如何发送移动,http基本身份验证和JSON的帖子请求标头?

我有一个Rails 3.1应用程序的RSPEC集成测试,需要通过发布具有 JSON参数的POST请求和需要使用http_basic身份验证的移动头来测试移动客户端的api
由于请求对象在集成测试中不可用,所以我有点困惑

这是迄今为止的代码

it "successfully posts scores" do
# request.env["HTTP_ACCEPT"] = "application/json" #This causes an error as request is nly available in controller tests

      post "scores", :score => {:mobile_user_id => @mobile_user.id, :points => 50, :time_taken => 7275}.to_json,
           :format => :json, :user_agent => 'Mobile', 'HTTP_AUTHORIZATION' =>  get_basic_auth
    end

发布请求不认识我使用http基本身份验证,但不确定json的格式是否正确.任何帮助赞赏

get_basic_auth是一个helper me4thod,看起来像这样

def get_basic_auth
    user = 'user'
    pw = 'secret'
    ActionController::HttpAuthentication::Basic.encode_credentials user, pw
  end

我在我的控制器中使用一个before_filter来检查移动和http_basic_authentication,看起来像这样

def authorize
    logger.debug("@@@@ Authorizing request #{request.inspect}")
    if mobile_device?
        authenticate_or_request_with_http_basic do |username, password|
          username == Mobile::Application.config.mobile_login_name && Mobile::Application.config.mobile_password
        end
    else
      unless current_user
        redirect_to login_url, :notice => "Please log in"
      end
    end
  end

我得到一个重定向登录,所以显然,移动头不被接受,所以我不知道真的,如果其他任何头都正常工作

UPDATE
弄清楚了

post("scores", {:score => {:mobile_user_id => @mobile_user.id, :points => 50, :time_taken => 7275}}.to_json,
       {"HTTP_USER_AGENT" => "Mobile", 'HTTP_AUTHORIZATION' => get_basic_auth, 'HTTP_CONTENT_TYPE' => "application/json"})

诀窍很好

我想出了我需要做什么

post("scores", {:score => {:mobile_user_id => @mobile_user.id, :points => 50, :time_taken => 7275}}.to_json,
       {"HTTP_USER_AGENT" => "Mobile", 'HTTP_AUTHORIZATION' => get_basic_auth, 'HTTP_CONTENT_TYPE' => "application/json"}

显然,“移动”用户代理不需要测试正常的json请求.

希望能帮助某人

相关文章
相关标签/搜索