对于一个规范,我试图在一个新模块(NewModule)中存根一个新类(MyClass),这两个模块都不存在。
此规范适用于使用MyClass的类
let(:my_class) { instance_double('ParentModule::NewModule::MyClass', extract_values: expected_value) }
ParentModule:已经存在
NewModule:还不存在
MyClass:还不存在
不幸的是,它引发了此错误
NameError:
uninitialized constant ParentModule::NewModule
任何建议都是实现此目标的正确方法。
答案 0 :(得分:1)
您可以通过stub_const
将常量存根:
let(:my_class) { stub_const('ParentModule::NewModule::MyClass', Class.new) }
从文档中
当尚未定义常量时,所有 必要的中介模块将被动态创建。该示例完成后, 中间模块常量将被删除,以将常量状态返回到其状态 开始。
答案 1 :(得分:0)
感谢@Stefan的建议,这对我有用。
# Modules Abc and Pqr also do not exist yet
let(:class_name) { 'Abc::Pqr::SomeMagic' }
let(:fake_class) { Class.new { def do_some_magic; end } }
let(:magic_class) { class_double(stub_const(class_name, fake_class)).as_stubbed_const }
let(:magic_class_instance) { instance_double(magic_class) }
before do
allow(magic_class).to(receive(:new).and_return(magic_class_instance))
allow(magic_class_instance).to(receive(:do_some_magic).and_return('some value'))
end