如何使用参数测试助手

时间:2019-08-05 23:01:53

标签: ruby minitest

我试图用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'

1 个答案:

答案 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。但是,使用像这样的依赖注入肯定可以工作,并且会更简单。