这里我们有一个struct文件
module CoreDomain
Corporation = Struct.new(...)
end
我们有这样一个测试文件,
require 'test_helper'
module CoreDomain
class CorporationTest < ActiveSupport::TestCase
def test_corporation_struct_creation
corp_struct = CoreDomain::Corporation.new(...)
assert_equal ..., ...
end
end
end
当我试图执行测试时,我得到这个错误。
NameError: uninitialized constant CoreDomain::Corporation
问题-我错在哪里?
我认为你在欺骗自动装填器。
由于您的测试嵌套在module CoreDomain
中,当您到达CoreDomain::Corporation.new(...)
时,它不会触发自动加载器开始寻找CoreDomain
常数。经典的自动装弹机是通过入侵Object.const_missing
来工作的,所以很容易出现这类错误。
解决方案是在重新打开模块之前引用常量:
require 'test_helper'
CoreDomain::Corporation # take that you stupid autoloader!
module CoreDomain
class CorporationTest < ActiveSupport::TestCase
def test_corporation_struct_creation
corp_struct = Corporation.new(...)
assert_equal ..., ...
end
end
end
或者直接从模块中删除测试类。
可能有一些误解,但我所需要做的就是添加这一行
require_relative '../../core/domain/corporation.rb'
放到test_corporation.rb
文件的顶部