Ruby on rails 在helper中使用实例变量是一种不好的做法吗?
我一直在重构一个旧项目,我看到一些助手方法很难测试,因为助手中存在实例变量 实现这一目标的最佳实践是什么?将这些实例变量作为参数传递给帮助程序 在测试中,我可以做这样的事情,但看起来很奇怪Ruby on rails 在helper中使用实例变量是一种不好的做法吗?,ruby-on-rails,view-helpers,Ruby On Rails,View Helpers,我一直在重构一个旧项目,我看到一些助手方法很难测试,因为助手中存在实例变量 实现这一目标的最佳实践是什么?将这些实例变量作为参数传递给帮助程序 在测试中,我可以做这样的事情,但看起来很奇怪 it 'returns family and categoy names' do @category = instance_double(Category, name: 'category_name') expect(helper.meta_description_home_product
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
谢谢,我不会这么做的。它将您的控制器和视图层紧密地结合在一起,使未来的功能、重写和重构变得更加困难 它还使得读取、测试和修复控制器和视图的错误变得困难
关注与责任分离是一个值得考虑的问题。保留这些确实有助于长期项目。我不会这么做。它将您的控制器和视图层紧密地结合在一起,使未来的功能、重写和重构变得更加困难 它还使得读取、测试和修复控制器和视图的错误变得困难
关注与责任分离是一个值得考虑的问题。保留这些信息对长期项目确实有帮助。我不知道这是否是一种不好的做法,但在这种情况下,它会让你的助手对使用这些信息的地方知道得太多。它取决于一个
@category
实例变量,该变量同时也是一个必须响应name
的对象,如果它没有响应呢?诸如此类的事情使得你的代码很难移动和/或测试。如果很难测试,那么它可能不是一个好的代码。我只会使用一个category
参数,更容易测试,更容易理解,更容易使用,没有魔力。我不知道这是否是一个糟糕的做法,但在这种情况下,它会让你的助手知道太多关于它将被使用的地方。它取决于一个@category
实例变量,该变量同时也是一个必须响应name
的对象,如果它没有响应呢?诸如此类的事情使得你的代码很难移动和/或测试。如果很难测试,那么它可能不是一个好的代码。我只会使用一个category
参数,更容易测试,更容易理解,更容易使用,没有魔力。
<% @products.each ...
...
my_helper
...
module ApplicationHelper
def my_helper
...
desctiption = 'blabla' if @category.name == 'blabla'