我在Foo
中定义了一个模型app/models/foo.rb
:
class Foo
def self.bar
# do bar
end
end
在app/use_cases/do_bar.rb
module UseCases
class DoBar
def call
Foo.bar
end
end
end
最近,我遇到了以下空气制动器错误:
UseCases :: Foo:Class
的未定义方法`bar'
我认为在用例中将::
添加到Foo
之前会解决此错误,但我不确定如何强制此错误?我已经使用了案例测试,这些测试通过了或不带::
。
如何编写测试以确保将::
前置Foo
作为此错误的正确解决方法?
答案 0 :(得分:0)
每当在Foo
类的模块层次结构中定义类DoBar
时,此错误似乎都是可重现的。
让我们从一个有效的例子开始:
class Foo
def self.bar
p 'bar'
end
end
module UseCases
class DoBar
def call
Foo.bar
end
end
end
UseCases::DoBar.new.call #=> bar
我们可以通过添加以下类来重现undefined method 'bar'
异常:
module UseCases
class Foo
end
end
在与DoBar
相同的模块中,类UseCases::Foo
优先于::Foo
类。如果我们将UseCases::Foo
更深入地移动到层次结构中,我们的异常就会消失:
# having UseCases::OneMore::Foo doesn't cause any problems
module UseCases
module OneMore
class Foo
end
end
end