用rspec测试lib文件夹的正确方法?

时间:2014-02-04 05:19:51

标签: ruby-on-rails rspec

我有一个测试试图测试位于lib文件夹中的类。

现在我在parser_spec.rb中执行此操作

require 'spec_helper'
require 'parser' --> Because my class is /lib/parser.rb

describe "parser" do
  it "needs a url to initialize" do
    expect { Parser.new }.to raise_error(ArgumentError)
  end
end

包含所有lib文件的正确方法是什么,以便它们属于rspec测试的范围?

4 个答案:

答案 0 :(得分:24)

您的方式 - require 'parser'是推荐的方式。 RSpec将lib放在$LOAD_PATH上,以便您可以要求相对于它的文件,就像您已经完成的那样。

答案 1 :(得分:4)

Try this

require_relative "../../lib/parser.rb"

or 

require 'lib/parser.rb'

rspec在运行时自动加载'spec / spec_helper.rb',并且它还会自动将'lib'文件夹添加到它的LOAD_PATH中,这样就可以正确地看到并且需要'lib / parser.rb'。< / p>

答案 2 :(得分:2)

为了避免像Ryan Bigg所说的lib自动加载,您可以自动加载位于应用根目录中的自定义目录:

进入/your/config/application.rb,您可以添加:

config.autoload_paths += %W(#{config.root}/my_stuff)

然后,你可以这样做:

require 'spec_helper'

describe Parser do
  #your code...
end

也许,你可以把你的班级放在一个模块中,以避免碰撞:

class MyStuff::Parser
  #your code...
end

然后,你可以这样做:

require 'spec_helper'

describe MyStuff::Parser do
  #your code...
end

答案 3 :(得分:0)

只需将'lib'文件夹放入autoload_path即可。例如,在application.rb

config.autoload_paths += "#{Rails.root}/lib/"

然后你可以正常做到

require 'spec_helper'

describe Parser do
  ...
end