ruby-on-rails-4 - 消除 500 错误

标签 ruby-on-rails-4 webmock

我遇到了 webmocks stub 问题。

这是一个使用 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 设置的,或者在 before block 中设置的。我试图将其提炼为最小的选项,但测试仍然失败。

问题

我在期待

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

始终返回 500 状态响应,但它返回 200。

我的期望正确吗? webmocks 应该这样调用吗?

最佳答案

您需要将查询参数添加到stub_request方法中,您可以将其更改为这样

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

关于ruby-on-rails-4 - 消除 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29490678/

相关文章:

ruby-on-rails - 每个循环中的自动增量值

ruby-on-rails - update_attribute 与 update_attributes Rails 4

ruby - taps 从 sqlite 到 postgres rails4、ruby 1.9.3 的迁移失败

ruby-on-rails - 针对 XML 请求的 Rails WebMock

ruby-on-rails - rails : How to stub and test this external service call?

ruby - 如何使用 WebMock 在 Sinatra 应用程序中模拟 Paperclip 调用?

ruby-on-rails - Rails 中不允许的参数

javascript - 如何使用 Ajax 调用在 application.js 中正确执行 jquery 请求

ruby - 在这种情况下我将如何使用 VCR(使用 WebMock)?

ruby-on-rails - 在 Rails 集成测试中 stub 第 3 方 API 调用