【问题标题】:Rspec 'cannot load such file'Rspec'无法加载这样的文件'
【发布时间】:2016-03-18 18:28:00
【问题描述】:

我正在使用 Code School 的 Rspec 课程进行测试,并在我的 Ubuntu 系统中安装了 ruby​​ 2.2.1、rails 4.2.5.1 和 rspec 3.4.4。正如第一个视频描述的那样,我输入了

rspec --init

在我的项目文件夹中,它创建了一个规范文件夹,我在其中创建了一个名为 lib 的新目录。我在那里放置了两个 .rb 文件:

touch spec/lib/zombie_spec.rb
touch spec/lib/zombie.rb

spec_helper.rb 通常在 spec 文件夹中创建。 如果我运行:

rspec spec/lib/zombie_spec.rb

对于zombie_spec.rb中的以下代码:

require "spec_helper"
describe "Zombie" do
    it "is named Ash"
end

一切都按预期运行,并在视频中显示。 但是如果我采取下一步并添加

require "zombie"

在第一个 require 之后到zombie_spec.rb 文件,我得到错误:

cannot load such file -- zombie (LoadError)

zombie.rb 看起来完全像这样:

class Zombie
end

【问题讨论】:

    标签: ruby-on-rails ruby rspec rubygems


    【解决方案1】:

    通常你不希望你的 zombie.rb 在你的 spec 文件夹中,因为它不是一个测试文件,但我不熟悉 Code School 教程。 RSpec 对文件路径有一些神奇的作用,所以它可能会找错地方。

    您可以尝试require_relative "./zombie" 或将zombie.rb 移出您的规范文件和require "<path_to_zombie>/zombie"

    【讨论】:

      【解决方案2】:

      zombie.rb 应位于 @kclowes 指出的 {project_home}/lib/ 中。

      在您的情况下,因为它位于同一文件夹中(不推荐),您应该使用格式:require './zombie' 而不是 require 'zombie',因为后者用于标准和/或第三方库。

      这个问题已经有几个月的历史了,但我正在回答以防有人偶然发现这个问题。

      【讨论】:

        【解决方案3】:

        除了 kclowes 回答之外,您还可以将目录添加到 rails 配置中的自动加载路径,以便在 Rails 加载时它们自动为 required。

        要做到这一点,只需添加

        config.autoload_paths << "#{config.root}/spec/lib"

        config/test.rb

        【讨论】:

          【解决方案4】:

          如果您只想在另一个文件中要求一个文件,这是另一种可能性:

          require "#{::Rails.root}/spec/support/models/shared_examples/<my_file>"
          

          (Rails 6.0.x)

          【讨论】:

            猜你喜欢
            • 2015-11-24
            • 2019-06-08
            • 2014-05-31
            • 2015-03-25
            • 2019-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多