2013-06-06 39 views
17

Tôi đang gặp vấn đề trong kiểm tra đá quý của tôi bao gồm một thư mục lib, trên JRuby 1.7.4.Làm thế nào để bao gồm thư mục lib trong các thử nghiệm rspec

Tôi muốn thử nghiệm một tập tin nằm ở lib/vger/resources/account_manager.rb

file spec của tôi là trong spec/vger/resources/account_manager_spec.rb

require 'spec_helper' 

describe Vger::Resources::AccountManager do  
    . 
    . 
    end 
end 

Tôi cố gắng để bao gồm các tập tin mà tôi muốn kiểm tra trong spec_helper.rb

require 'rubygems' 
require 'bundler/setup' 
require 'vger/resources/account_manager' 
require 'vger' 

RSpec.configure do |config| 
    # some (optional) config here 
end 

Trong khi chạy thử nghiệm theo lệnh rspec spec/vger/resources/account_manager_spec.rb Tôi nhận được lỗi này:

NameError: uninitialized constant Vger::Resources 
    const_missing at org/jruby/RubyModule.java:2631 

Dường như tệp mà tôi muốn thử nghiệm không được tải. Xin vui lòng cho tôi biết nơi tôi đang đi sai và tôi nên sửa chữa ở đâu.

+0

Cố gắng sử dụng 'require_relative' và đường dẫn đến các tài nguyên trong thư mục lib từ thư mục chứa' spec_helper.rb'. Một cái gì đó như 'require_relative" ../ lib/vger "' thay vì 'require" vger "' ant ... –

+0

@YevgeniyAnfilofyev Nó dường như không hoạt động. Tôi đã thử require_relative '../lib/vger/' cũng require_relative '../lib/vger/resources/' và loại bỏ requre 'Vger' và yêu cầu "vger/resources/account_manager" –

+1

Xem câu hỏi này http: // stackoverflow.com/questions/11376718/require-lib-in-rspec-với-ruby-1-9-2-mang-no-such-file-to-load – toro2k

Trả lời

2

RSpec tải đường ray môi trường, như tôi nhớ, vì vậy bạn chỉ cần để thêm vào thư mục tự động load trong file application.rb bạn

Tìm dòng này

# config.autoload_paths += %W(#{config.root}/extras) 

bỏ ghi chú nó sửa chữa nó là như thế này :

config.autoload_paths += %W(#{config.root}/lib) 

nó nên làm việc

+5

Đây không phải là dự án đường ray. Đây là một viên ngọc mà tôi đang sử dụng trong một ứng dụng đường ray. SO, tôi đoán nó sẽ không hoạt động –

+0

Tôi giả định này sẽ đệ quy tự động tải đường dẫn? Vì vậy, ví dụ, bất kỳ nhiệm vụ cào dưới '/ lib/nhiệm vụ' cũng sẽ được nạp? – Dennis

14

thủ cập nhật cho bạn r LOAD PATH trong spec_helper.rb trước khi gọi require nên thực hiện thủ thuật. Hãy thử làm này dòng đầu tiên của spec_helper.rb của bạn:

$: << '../lib' 

hoặc

$LOAD_PATH << '../lib' 

($: là một bí danh cho $LOAD_PATH)

+0

Tôi đã thử nó. /home/...../work/vger/lib dường như đang được tải nhưng vẫn nhận được cùng một lỗi –

+1

'$: << File.expand_path (" spec/lib ")' làm việc cho tôi – amorphid

+4

Xem xét không sử dụng ' $: 'Nó rất khó hiểu và vì' $ LOAD_PATH' là không cần thiết để gõ, nên bạn cũng có thể sử dụng nó thay thế. Nhưng +1 để đưa vào. – Csteele5

4

tôi sử dụng sau đây để biết thông số kỹ thuật của tôi ... tùy ở cấp độ nào mà lib của bạn là ....

require_relative '../../lib/module'

+0

Bạn có thể muốn cải thiện câu trả lời của mình với một vài chi tiết khác. Một trong các nhận xét có thêm một chút thông tin mà bạn có thể đưa vào. – CaptainBli

2

Bạn có thể thêm dòng sau vào tập tin .rspec của bạn trong thư mục gốc của ứng dụng: -I lib

Nó cũng có thể bao gồm các file: -r lib/api.rb

Các tùy chọn này được mô tả như sau:

-I PATH

Specify PATH to add to $LOAD_PATH (may be used more than once).

-r, --require PATH

Require a file.

Các vấn đề liên quan