Rails 6 ActionController :: TestCase存根控制器方法

问题描述

我是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。谢谢。

解决方法

我最终使用了'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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...