2014-03-27 55 views
1

我在運行rails-api的Rails 4 API上運行使用RSpec的集成測試。我想看看如果錯誤的電子郵件地址傳遞給登錄控制器,我會得到一個401回。Rspec在檢測到401錯誤時沒有找到記錄時掛起

這裏是我的期望

it "should throw invalid login for user with invalid email" do 
    post "/api/v1/users/sign_in", uname: "[email protected]", password: "12234" 

    expect(response).to eq(401) 

end 

在我的控制,我有:

def create 
    @user = User.find_by_email(params[:uname]) 
    if(@user && @user.valid_password?(params[:password])) 
    .... 
end 

這個工程在瀏覽器很好,我得到一個401回。但是當我運行rspec時,它會掛起,從不報告失敗或通過,只是坐在那裏沒有錯誤。問題的癥結似乎是if(@user)部分。如果我刪除它,那麼測試至少會運行。

我檢查了log/test.log,我可以看到在日誌中已完成401未授權14ms(查看:0.2ms | ActiveRecord:2.8ms)

更新

爲了澄清,這是一個request spec。我正在測試API的使用者在無效電子郵件的情況下會收到401響應。

回答

3

嘗試

expect(response.response_code).to eq 401 

expect(response.status).to eq 401 
+1

這做到了。期望(response.response_code)。至公式401'工作。我扔了200個答案,我一直在使用'expect(response).to be_success',但顯然對於非200個答案我需要更具體。 – ejvaudio

相關問題