我正在为Rails编写一个gem,其中包含一个用于创建模型的生成器。在某些情况下,生成器应该调用自身,并使用generate
方法执行此操作。这在实际使用时工作正常。
我正在使用带有generator_spec
的RSpec 3.2来尝试测试此功能,但作为一个gem,当它进入generate
调用时,它会抱怨Rails不存在:< / p>
/path/to/ruby: No such file or directory -- bin/rails (LoadError)
所以我一直试图将Generator#generate
方法存根,使其与规范中的run_generator
做同样的事情,紧接在调用run_generator
的{{1}}来电之前在他们中间。
但是,对于我所有可能的解决方案,我遇到了问题。
generate
这会引发class Generator
def generate(*args)
run_generator args[1..-1]
end
end
。不足为奇。
undefined method 'run_generator'
这是完美的,但allow(generator).to receive(:generate) { |*args| run_generator args[1..-1] }
在幕后调用类方法,因此相关的run_generator
尚不存在。
generator
但是,使用double需要你将所有的方法存在于将要使用的方法上 - 其余的只是调用它们的原始实现。这似乎很难也没必要。有没有办法绕过它?
答案 0 :(得分:0)
Taryn East最终给了我vital clue:我需要在我的测试目录中使用完整的Rails应用程序。
不幸的是,generator_spec
的{{1}}方法完全打击了目标目录,所以我最终得到的结果是:
prepare_destination