2015-04-07 35 views
0

我遇到webmocks stubbing的問題。St a 500錯誤

這是一個使用devise/cancan進行身份驗證和授權的Rails 4應用程序。我正在使用RSpec編寫我的測試。

我有一個(簡化爲這篇文章的原因!)測試,我想運行。

require 'rails_helper' 

RSpec.describe ApiChecksController, type: :controller do 

    include Devise::TestHelpers 

    let(:user)   { FactoryGirl.create :user } 
    let(:api_params) do 
    { 
     param_1: 'VALUE', 
     param_2: '1980-01-01', 
     param_3: 'AA123', 
     param_4: "#{Date.today}" 
    } 
    end 

    context 'logged in as standard user' do 
    describe 'POST #lookup' do 
     context 'displays error' do 
     it 'when 500 returned' do 
      WebMock.disable_net_connect!(allow: 'codeclimate.com') 
      sign_in user 
      stub_request(:post, "#{ENV['API_PROXY']}/api/checks"). 
      to_return(status: [500, "Internal Server Error"]) 
      post(:lookup, api_check: api_params) 
      expect(response.status).to eq(500) 
     end 
     end 
    end 
    end 
end 

在完整的測試套件中,expect語句之上的所有內容都使用let或set之前的塊設置。我試圖將其提取到最小的選項,測試仍然失敗。

問題

我期待

stub_request(:post, "#{ENV['API_PROXY']}/api/checks"). 
    to_return(status: [500, "Internal Server Error"]) 

總是返回500個狀態響應,但它返回200

是我的期望是否正確?這是如何webmocks應該被稱爲?

回答

1

你需要的查詢參數添加到stub_request方法,你可以改變它是這樣

stub_request(:post, "#{ENV['API_PROXY']}/api/checks") 
    .with(query: {api_check: api_params}) 
    .to_return(status: [500, "Internal Server Error"])