Rspec 'cannot load such file'
Rspec 'cannot load such file'
我正在使用 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 文件后第一次 require,我得到错误:
cannot load such file -- zombie (LoadError)
zombie.rb 看起来完全像这样:
class Zombie
end
通常您不希望您的 zombie.rb
位于您的 spec 文件夹中,因为它不是测试文件,但我不熟悉 Code School 教程。 RSpec 对文件路径做了一些神奇的处理,因此它可能会查找错误的位置。
您可以尝试 require_relative "./zombie"
或将 zombie.rb
移出规范文件并 require "<path_to_zombie>/zombie"
。
除了 kclowes 答案之外,您还可以在 rails 配置中将目录添加到自动加载路径,以便它们在 Rails 加载时自动 require
d。
要做到这一点,只需添加
config.autoload_paths << "#{config.root}/spec/lib"
到config/test.rb
正如@kclowes 所指出的,zombie.rb
应该位于 {project_home}/lib/
中。
在你的情况下,因为它位于同一个文件夹中(不推荐),你应该使用格式:require './zombie'
而不是 require 'zombie'
,因为后者用于标准 and/or第三方库。
这个问题已经有几个月了,但我正在回答以防有人偶然发现这个问题。
如果您只想在另一个文件中要求一个文件,这是另一种可能性:
require "#{::Rails.root}/spec/support/models/shared_examples/<my_file>"
(Rails 6.0.x)
我正在使用 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 文件后第一次 require,我得到错误:
cannot load such file -- zombie (LoadError)
zombie.rb 看起来完全像这样:
class Zombie
end
通常您不希望您的 zombie.rb
位于您的 spec 文件夹中,因为它不是测试文件,但我不熟悉 Code School 教程。 RSpec 对文件路径做了一些神奇的处理,因此它可能会查找错误的位置。
您可以尝试 require_relative "./zombie"
或将 zombie.rb
移出规范文件并 require "<path_to_zombie>/zombie"
。
除了 kclowes 答案之外,您还可以在 rails 配置中将目录添加到自动加载路径,以便它们在 Rails 加载时自动 require
d。
要做到这一点,只需添加
config.autoload_paths << "#{config.root}/spec/lib"
到config/test.rb
zombie.rb
应该位于 {project_home}/lib/
中。
在你的情况下,因为它位于同一个文件夹中(不推荐),你应该使用格式:require './zombie'
而不是 require 'zombie'
,因为后者用于标准 and/or第三方库。
这个问题已经有几个月了,但我正在回答以防有人偶然发现这个问题。
如果您只想在另一个文件中要求一个文件,这是另一种可能性:
require "#{::Rails.root}/spec/support/models/shared_examples/<my_file>"
(Rails 6.0.x)