在助手中使用实例变量是一种不好的做法吗?
is it a bad practice to use instance variable in helper?
我一直在重构一个旧项目,我发现一些辅助方法很难测试,因为辅助方法中存在实例变量。
实现此目标的最佳做法是什么?将这些实例变量作为参数传递给助手...
在测试中我可以做这样的事情,但看起来很奇怪
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'
谢谢
我不会做的。它紧密耦合了你的控制器和视图层,使得未来的功能、重写和重构变得困难。
它也使您的控制器和视图难以阅读、测试和错误修复。
关注点和责任分离是需要考虑的问题。保留这些确实有助于长期项目。
我一直在重构一个旧项目,我发现一些辅助方法很难测试,因为辅助方法中存在实例变量。
实现此目标的最佳做法是什么?将这些实例变量作为参数传递给助手...
在测试中我可以做这样的事情,但看起来很奇怪
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'
谢谢
我不会做的。它紧密耦合了你的控制器和视图层,使得未来的功能、重写和重构变得困难。
它也使您的控制器和视图难以阅读、测试和错误修复。
关注点和责任分离是需要考虑的问题。保留这些确实有助于长期项目。