1

我目前正在编写一个非常简单的测试工具开始。这个想法是您可以拥有包含我的“可测试”模块的类。例如:

class Veilus
  include Testable
end

site = Veilus.new

可测试模块具有以下内容:

module Testable
  module_function

  def included(caller)
    caller.extend Testable::Interface::Page::Attribute
    caller.__send__ :include, Testable::Interface::Page
  end
end

当 Reek 检出这个文件时,它返回:

FeatureEnvy: Testable#included refers to 'caller'
more than self (maybe move it to another class?)

但这不是包含方法的要点之一吗?

我意识到我可以关闭 Reek 检查的这一方面,但我很好奇我将如何在这里遵循它的建议?在这种情况下,这门课不是我一早就知道的东西。其他人编写的课程将包括我的模块。

同样,我知道我可以关闭检查,但似乎我可能希望在其他情况下进行检查。因此,我开始怀疑我是否在使用“mixin”方法错误,这就是 Reek 所指出的。

4

1 回答 1

0

我找到了一种“处理”这个问题的方法,它本质上只是self用来引用included调用。因此,例如,我可以这样做:

module Testable
  def self.included(caller)
    caller.extend Testable::Interface::Page::Attribute
    caller.__send__ :include, Testable::Interface::Page
  end
end

我所做的是更改上面的代码,以便module_function不再使用对的调用。(尽管这确实违反了其他一些风格指南规则。)然后我只是self.included消息前面使用了。

当我这样做时,FeatureEnvy 警告不再出现。老实说,这似乎是标记 FeatureEnvy 条件的一种非常弱的方法。

这与其他各种问题一起,说服了我不要使用 Reek 并坚持使用 Rubocop。(我意识到,在很多情况下,他们在看非常不同的东西。)我不提倡将这种方法用于企业类型的开发,但在编写测试工具方面,我发现你实际上做了很多“聪明”的事情,检查员像臭臭一样只是不喜欢。

于 2016-11-23T22:24:37.823 回答