【问题标题】:Rails 6 ActionController::TestCase stub a controller methodRails 6 ActionController::TestCase 存根控制器方法
【发布时间】:2020-10-06 21:53:00
【问题描述】:

我是 Ruby/Rails 和 Ruby/Rails 中的测试框架的新手。我有一个验证传入请求的预验证方法(外部 API)。对于所有测试用例,我想存根该调用并测试剩余的功能。

我了解测试和模拟/存根/间谍(主要是 Mockito/Powermockito 的东西),但不知道我在 Rails 测试方面的方法。我尝试研究 RSpec / MiniTest 的东西,但它变得不堪重负。

我有一个这样的控制器方法:

def handler
      # validate
      request_validated = validate_request
      unless request_validated
        head :unauthorized
        return
      end

      #... remaining codes
end

def validate_request
     # validation with external API
end

我使用ActionController::TestCase 设置了控制器测试。在添加验证内容之前,我所有的测试用例都已经过测试。但我不能绕过验证检查。

我想要类似的东西

controller.stub(validate_request).then_and_return(true)   # need something of this sort

post :handler, as: :json, params: completed_service_parameters
assert_response :no_content

我愿意使用任何库,但如果有的话,我更愿意使用任何内置的 Rails。谢谢。

【问题讨论】:

    标签: ruby-on-rails integration-testing ruby-on-rails-6 actioncontroller


    【解决方案1】:

    我最终使用了'minitest/stub_any_instance'

    require 'minitest/stub_any_instance'
    
    ...
    test 'test stub' do
          ...
          Controller.stub_any_instance(:function, return-value) do
            # perform the call within the stubbed block
            post :function, as: :json, params: { :param1 => 'random' }
          end
          ...
    end
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多