首页 > 解决方案 > 使用 Rspec 执行 Web 请求时的存根控制器方法

问题描述

如何存根发出请求时发生的控制器方法或辅助方法?

我有一个发出网络请求的测试。请求发送到控制器,该控制器也调用辅助方法。在下面的示例中,我想service_config为我的测试目的存根返回值,因为service_config它来自AdminsHelper并执行对服务的实际 API 请求。

我对 Rspec 和这些类型的测试实践有点陌生,所以我在正确测试这个 Web 请求时也可能走错路

测试:

context 'when an invalid parameter is specified' do
  it 'should return a hash of size 0' do
    get '/admins/configs/poop'
    json = JSON.parse(response.body)
    expect(json).to be == ({})
  end
end

控制器:

class AdminsController < ApplicationController
  include AdminsHelper

  def configs
    response = service_config
    render json: response, status: 200
  end
end

标签: ruby-on-railsrubyrspec

解决方案


我希望RSpecs 任何实例模拟在这种情况下都会起作用。

context 'when an invalid parameter is specified' do
  it 'should return a hash of size 0' do
    allow_any_instance_of(AdminsController).to receive(:service_config).and_return({})

    get '/admins/configs/poop'

    json = JSON.parse(response.body)
    expect(json).to eq({})
 end

结尾


推荐阅读