问题描述
我是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