Rspec'无法加载此类文件&{39;

时间:2016-03-18 18:28:00

标签: ruby-on-rails ruby rspec rubygems

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

rspec --init

在我的项目文件夹中,它创建了一个spec文件夹,在其中我创建了一个名为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"
在第一次需要之后

到zombie_spec.rb文件,我收到错误:

cannot load such file -- zombie (LoadError)

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

class Zombie
end

4 个答案:

答案 0 :(得分:3)

通常,您不希望自己的zombie.rb位于spec文件夹中,因为它不是测试文件,但我不熟悉Code School教程。 RSpec对文件路径做了一些魔术,所以它可能会在错误的位置查找。

您可以在规范文件和require_relative "./zombie"之外尝试zombie.rb或移动require "<path_to_zombie>/zombie"

答案 1 :(得分:3)

zombie.rb应位于{project_home}/lib/,正如@kclowes所指出的那样。

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

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

答案 2 :(得分:1)

除了kclowes,你还可以在rails配置中的自动加载路径中添加目录,这样当Rails加载时它们会自动require

为此,只需添加

即可

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

config/test.rb

答案 3 :(得分:0)

如果您只想要求一个文件与另一个文件完全相同,这是另一种可能性:

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

(Rails 6.0.x)