【问题标题】:Rails 3, app/lib not loaded with rspecRails 3,app/lib 未加载 rspec
【发布时间】:2015-05-22 15:41:07
【问题描述】:

我有一个控制器“A”,它需要 app/lib 子目录中的文件(例如:app/lib/a_folder/my_class.rb)。

所以我做了这样的事情:

require 'a_folder/my_class'

class AController < ApplicationController
  # Some stuff using MyClass
end

当我使用应用程序时它运行良好,但在我启动 RSpec 时不起作用。

这就是我的 RSpec 文件的外观:

require 'spec_helper'
require 'lib/import_functions' # Rails.root/spec/lib/import_functions.rb

RSpec.describe AController, type: controller do
  # My tests routines
end

当我启动 rspec 时,它告诉我控制器文件中的 require 没有找到该文件(`require':无法加载此类文件),而当我启动应用程序时它运行良好。

我在 require 之前添加了 puts $LOAD_PATH,但 Rails.root/app/lib 似乎不存在。

我使用 Rails 3.2 和 rspec-rails 3.2。

请问有人知道为什么会发生这种情况以及如何解决吗?

感谢您以后的回答。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rspec


    【解决方案1】:

    lib 文件不会自动加载。你可以把下面的配置放到你的application.rb中,有问题也会加载lib目录下的所有文件。

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

    或者你可以在你的 RSpec 中加载你的 lib 文件,如下代码

    require_relative "../../lib/a_folder/my_class.rb"
    

    require 'lib/a_folder/my_class.rb'
    

    【讨论】:

    • 感谢您的回答。我很久以前已经将 lib 添加到加载路径中。实际上我只是发现问题不在代码中(因为我确实添加了规范,我总是这样做很奇怪它没有工作),但在文件名中......我的规范文件被称为 foobar.spec。 rb 而不是 foobar_spec.rb ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多