如何编写/运行模型/视图/控制器以外的文件的规格

时间:2011-12-08 12:00:43

标签: ruby-on-rails ruby rspec

使用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

3 个答案:

答案 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/文件并为它们编写测试。