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

Hom*_*ith 32 rspec ruby-on-rails

我有一个测试,试图测试位于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
Run Code Online (Sandbox Code Playgroud)

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

Myr*_*ton 26

你做的方式 - require 'parser'是推荐的方式.RSpec lib就是$LOAD_PATH这样,你可以像你一样需要相对于它的文件.


VDN*_*VDN 5

Try this

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

or 

require 'lib/parser.rb'
Run Code Online (Sandbox Code Playgroud)

rspec运行时会自动加载'spec / spec_helper.rb',并且还会自动将'lib'文件夹添加到它的LOAD_PATH中,以便可以正确地看到和要求您在'lib / parser.rb'中的要求。


Ser*_*sev 2

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

config.autoload_paths += "#{Rails.root}/lib/"
Run Code Online (Sandbox Code Playgroud)

然后就可以正常进行了

require 'spec_helper'

describe Parser do
  ...
end
Run Code Online (Sandbox Code Playgroud)

  • 请不要为此使用“autoload_paths”,因为它会使“lib”中的所有内容都可用于自动加载,这可能会产生不良后果。https://github.com/radar/guides/blob/master/rails-lib-files.md (4认同)