使用rails和rspec,当我使用带模型/视图/控制器的rails generate
命令时,很容易让rspec为我生成必要的文件。但是现在我想为我写的模块编写规范。该模块位于/lib/my_module.rb
,因此我在/spec/lib/my_module_spec.rb
我遇到的问题是,当我尝试rspec spec/
时,文件my_module_spec.rb
已运行,但无法找到lib/my_module.rb
中对我的模块的引用。什么是正确的方法?
仅供参考my_module_spec.rb
文件中已有require 'spec_helper'
require 'spec_helper'
describe "my_module" do
it "first test"
result = MyModule.some_method # fails here because it can't find MyModule
end
end
答案 0 :(得分:9)
您可以尝试包含模块,也可以将其包装在对象中
require 'spec_helper'
#EDIT according to
# http://stackoverflow.com/users/483040/jaydel
require "#{Rails.root}/lib/my_module.rb"
describe MyModule do
let(:wrapper){
class MyModuleWrapper
include MyModule
end
MyModuleWrapper.new
}
it "#some_method" do
wrapper.some_method.should == "something"
end
end
答案 1 :(得分:1)
您的模块是否包含类方法或实例方法?请记住,只有类方法可以通过
获得MyModule.some_method
意味着some_method被定义为
def self.some_method
...
end
如果您的模块包含实例方法,请使用上面的Jasper解决方案。希望澄清。
答案 2 :(得分:0)
将以下内容放入config/application.rb
文件中:
config.autoload_paths += %W(#{Rails.root}/lib)
我只是在解决同样的问题,上面对我有用。没有任何理由你必须跳过箍才能从RSpec访问你的lib/
文件并为它们编写测试。