2

Webmocks のスタブ化に問題があります。

これは、認証と承認に 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 ステートメントより上のすべてが、lets または set in before ブロックを使用して設定されます。最小のオプションまで抽出しようとしましたが、テストはまだ失敗しています。

質問

私は期待していました

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

常に 500 のステータス レスポンスを返すようにしましたが、200 を返しています。

私の期待は正しかったですか?これは、webmocks を呼び出す方法ですか?

4

1 に答える 1

4

メソッドにクエリパラメーターを追加する必要があります。次のstub_requestように変更できます

stub_request(:post, "#{ENV['API_PROXY']}/api/checks")
  .with(query: {api_check: api_params})
  .to_return(status: [500, "Internal Server Error"])
于 2015-04-09T10:44:15.170 に答える