2011-11-04 41 views
13

我有一個Rails 3.1應用程序的RSPEC集成測試,需要通過發出帶有JSON參數的POST請求和需要使用http_basic身份驗證的移動頭來測試移動客戶端的api 由於請求對象不可用集成測試我有點堅持Rspec Rails 3.1集成測試。如何發送移動版,http基本身份驗證和JSON的發佈請求標頭?

這是我到目前爲止的代碼

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 

POST請求不承認,我使用HTTP基本身份驗證,但不確定是否爲JSON格式是正確的。任何幫助表示讚賞

get_basic_auth是一個輔助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"}) 

的伎倆很好

回答

8

我想通了什麼,我需要做的

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請求。

希望能幫助別人

相關問題