Und*_*ion 4 ruby specs rspec sinatra
RSpec(2.12.2)让我很难过.如果我想在我的一个规范中引用一个类,并且该类不在我的/lib目录的根目录中,则会抛出一个错误:
no such file to load -- test (LoadError)
Run Code Online (Sandbox Code Playgroud)
似乎我的规范可以嵌套在文件夹结构中,但是当我尝试并且需要一个嵌套文件夹中的类时(例如lib/workers/conversion_worker.rb),我得到了这个错误.
我在所有规范中都使用了'spec_helper',但即使对类路径进行硬编码也会导致同样的错误.
有了这个结构:
-lib/
- class_found.rb
- workers/
- class_not_found.rb
Run Code Online (Sandbox Code Playgroud)
规范看起来像这样:
# spec/workers/class_not_found_spec.rb
require "spec_helper"
require "class_not_found"
describe ClassNotFound do
it "Does something"
end
Run Code Online (Sandbox Code Playgroud)
以下命令成功运行规范(-I标志添加$ LOAD_PATH的路径):
$ rspec spec/workers/class_not_found_spec.rb -I /Path/to/project/*
Run Code Online (Sandbox Code Playgroud)
因此,似乎RSpec没有在其路径下添加lib以下的任何内容.
我可以使用require_relative成功地要求class_not_found.rb:
require_relative "../../lib/workers/class_not_found.rb" #Succeeds
Run Code Online (Sandbox Code Playgroud)
但不使用require:
require "lib/workers/class_not_found.rb" # Fails
Run Code Online (Sandbox Code Playgroud)
我不知道你有没有你想要的答案,但似乎你并没有正确地要求你的文件.
您的'lib/class_found.rb'文件应该需要所有库文件,因此它应该类似于:
require 'workers/class_not_found'
Run Code Online (Sandbox Code Playgroud)
并且您spec_helper.rb将需要文件lib夹中的主文件,因此它应该类似于:
require 'class_found'
Run Code Online (Sandbox Code Playgroud)
rspec 'spec/spec_helper.rb'在运行时自动加载,它还会自动将'lib'文件夹添加到其中LOAD_PATH,以便'lib/class_found.rb'正确查看和要求您的需求.
| 归档时间: |
|
| 查看次数: |
4598 次 |
| 最近记录: |