我试图用params [:a]测试辅助方法。我没有使用Rspec,所以不知道如何解决。
在帮助文件中:
def get_commands(filter)
order_by = params[:order_by]
something else(filter)
end
和测试文件:
test 'get_commands works' do
filter = something
res = get_commands(filter)
end
它显示:NameError: undefined local variable or method `params'
如果我只添加它也将不起作用
params[:order_by]='desc'
答案 0 :(得分:0)
一种非常通用的方法是使用依赖注入。
首先,更改方法以接受params作为参数:
def get_commands(filter, params)
order_by = params[:order_by]
something else(filter)
end
在调用该方法时,请确保在控制器中包含此新参数。
然后,您可以在测试中传递模拟参数集:
test 'get_commands works' do
filter = something
mock_params = ActionController::Parameters.new(order_by: :id)
res = get_commands(filter, mock_params)
# ... make your expectation about the result.
end
作为警告,依赖注入有时被视为反模式。 Rails确实内置了一些用于测试控制器的辅助程序,请参见https://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers。但是,使用像这样的依赖注入肯定可以工作,并且会更简单。