【发布时间】:2019-12-01 18:55:51
【问题描述】:
我一直在重构一个旧项目,我发现一些辅助方法难以测试,因为辅助方法中存在实例变量。
实现这一目标的最佳做法是什么?将这些实例变量作为参数传递给助手...
在测试中我可以做这样的事情,但是看起来很奇怪
it 'returns family and categoy names' do
@category = instance_double(Category, name: 'category_name')
expect(helper.meta_description_home_products).to eq(
'blabla - categoria'
)
end
作为控制器视图和助手的示例:
class HomeController < BaseController
@family = ...
@category = ...
@products = ...
end
在视图中
<% @products.each ...
...
my_helper
...
在助手中:
module ApplicationHelper
def my_helper
...
desctiption = 'blabla' if @category.name == 'blabla'
谢谢
【问题讨论】:
-
我不知道这是不是一个不好的做法,但在这种情况下,它会让你的助手对将要使用它的地方了解太多。它依赖于一个
@category实例变量,它同时也是一个必须响应name的对象,如果没有呢?这样的事情会使您的代码难以移动和/或测试。 -
如果很难测试,那么它可能不是一个好的代码。我只会使用
category参数,更容易测试,更容易理解,更容易使用,没有魔法。
标签: ruby-on-rails view-helpers