Rspec“无法加载此文件”

10
我正在学习Code School的Rspec课程,并在我的Ubuntu系统上安装了ruby 2.2.1、rails 4.2.5.1和rspec 3.4.4。正如第一个视频所描述的那样,我键入了


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"
在第一个 require 之后,当我向 zombie_spec.rb 文件添加内容时,出现了错误:
cannot load such file -- zombie (LoadError)

zombie.rb的样子如下:

class Zombie
end
4个回答

5
通常情况下,您不会将zombie.rb放在spec文件夹中,因为它不是一个测试文件,但我不熟悉Code School教程。RSpec对文件路径进行了一些魔法处理,因此可能正在错误的位置查找文件。
您可以尝试require_relative "./zombie"或将zombie.rb移动到spec文件之外,并require "<path_to_zombie>/zombie"

3

zombie.rb 应该位于 {project_home}/lib/ 目录下,如 @kclowes 所指出的。

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

虽然这个问题已经过去几个月了,但我还是回答了,以防某人遇到这个问题。


1
除了kclowes的回答之外,您还可以在Rails配置中添加目录到自动加载路径,这样它们将在Rails加载时自动被require
要实现这一点,只需将以下内容添加到config/test.rb文件中: config.autoload_paths << "#{config.root}/spec/lib"

0
如果您只想在另一个文件中引用一个文件,这是另一种可能性:
require "#{::Rails.root}/spec/support/models/shared_examples/<my_file>"

(Rails 6.0.x)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接