我在
Datetools
中有一个模块 lib/utils/datetools.rb
:
module Datetools
def hello
'world'
end
end
我想用
DatetoolsTest
中名为 test/utils/datetools_test.rb
的类来测试它:
import Datetools
class DatetoolsTest < TestCase
test 'hello world' do
assert Datetools.hello() == 'world'
end
end
当我跑步时:
rails t test/utils/datetools_test.rb
我收到错误:
uninitialized constant Datetools (NameError)
如何在测试用例中获取我的
Datetools
模块?
版本:Ruby 3.3.5、Rails 7.1.4
你在这里看起来很困惑。
lib
不在自动加载路径上,因此如果您需要执行以下操作之一:
require Rails.root.join('lib/utils/datetools')
app/utils
而不是 lib 中,因为它及其所有子文件夹都是自动加载根目录。但是,即使您加载代码,您仍然会得到
undefined method 'hello' for module Datetools (NoMethodError)
。如果您希望该方法可作为模块方法调用,则需要使用 def self.hello
或 module_function
方法。
也不清楚你为什么打电话
import Datetools
。它的作用是将 Datetools 的实例方法复制到recipent中,此时是main
(Ruby全局对象)。
如果您真正想要做的是测试模块的实例方法,那么更好的方法是在测试中创建一个类中的立场:
class DatetoolsTest < TestCase
# You could also use Class.new to create an anonymous class instead
class DummyClass
import Datetools
end
test 'hello world' do
assert_equal DummyClass.new.hello, 'world'
end
end
或者将模块导入到测试类中:
class DatetoolsTest < TestCase
import Datetools
test 'hello world' do
assert_equal hello, 'world'
end
end