2013-12-03 4 views
0

Получение атрибута NameError при запуске теста в Spork. Испытательные работы находят, если я не запускаю их в Spork. (Я бегу Spork через RubyMine 6.0)NameError при запуске теста rspec в Spork

ошибка:

NameError: uninitialized constant FileMakerSync::FMStudent 
./app/sync/file_maker_sync.rb:7:in `load_student' 
./spec/sync/file_maker_sync_spec.rb:8:in `block (4 levels) in <top (required)>' 

Моя спецификация находится в:

спецификации/синхронизации/file_maker_sync_spec.rb

describe FileMakerSync do 
    describe "..." do 
    context "..." do 
     before(:all) do 
     @student = FileMakerSync.load_student('....') 

     end 
    ... 
    end 

    end 
end 

Какие звонки

/app/sync/file_maker_sync.rb

class FileMakerSync 

    def self.load_student(student_id) 
    fm_student = FMStudent.find_single(student_id: student_id) 
    end 
    ... 
end 

который называет

app/models/filemaker/fm_student.rb

class FMStudent < FMBase 
    def as_local_model 
    end 
    ... 
end 

Я собирающий вопрос в том, что FMStudent правильно не загружается во время выполнения Spork. Который я не совсем понимаю.

Я новичок в рельсах и не совсем понимаю, когда требовать «имя файла» по сравнению с загружаемым по умолчанию. Также не то, что может отсутствовать в настройке spork.

Я попытался добавления требуют

require "app/models/filemaker/fm_student" 
class FileMakerSync 

, но чем я получил эту ошибку

Exception encountered: #<LoadError: cannot load such file --  app/models/filemaker/fm_student> 

Наконец мой spec_helper

require 'rubygems' 
require 'spork' 

Spork.prefork do 

    if ENV["RUBYMINE_HOME"] 
    $:.unshift(File.expand_path("rb/testing/patch/common", ENV["RUBYMINE_HOME"])) 
    $:.unshift(File.expand_path("rb/testing/patch/bdd", ENV["RUBYMINE_HOME"])) 
    end 

    ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 
    require 'rspec/autorun' 

    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 


    RSpec.configure do |config| 
    config.use_transactional_fixtures = true 
    config.infer_base_class_for_anonymous_controllers = false 
    config.order = "random" 
    config.include Capybara::DSL 


    #Mongoid database cleaner 
    config.before(:suite) do 
     DatabaseCleaner[:mongoid, {:connection => :unit_test}].strategy = :truncation 
     DatabaseCleaner[:mongoid, {:connection => :unit_test}].clean_with(:truncation) 
    end 

    config.before(:each) do 
     DatabaseCleaner[:mongoid, {:connection => :unit_test}].start 
    end 

    config.after(:each) do 
     DatabaseCleaner[:mongoid, {:connection => :unit_test}].clean 
    end 
    end 
end 

Spork.each_run do 
    # This code will be run each time you run your specs. 
    FactoryGirl.reload 

end 
+0

Ditch Spork. Шутки в сторону. Ваша жизнь станет намного лучше. – sevenseacat

ответ

1

Основываясь на пути модели, ваш FMStudent класс следует определить следующим образом:

# app/models/filemaker/fm_student.rb 
class Filemaker::FMStudent < FMBase 
    def as_local_model 
    end 
    ... 
end 

Тогда вы могли бы назвать его как:

/app/sync/file_maker_sync.rb 
class FileMakerSync 
    def self.load_student(student_id) 
    fm_student = Filemaker::FMStudent.find_single(student_id: student_id) 
    end 
    ... 
end 
+0

И почему это работало «за пределами spork»? – dboyd68

+0

Неплохо, это должно быть 'Filemaker :: FMStudent' в обоих файлах, так как ваше имя каталога -« filemaker ». – vee

+0

классный, который имеет смысл зафиксировать его с добавлением filemaker в config.autoload_paths, который сохраняет меня из пространства имен. Вы знаете, почему это сработало бы? он работал только с ошибкой, когда тест выполнялся в spork. – dboyd68

Смежные вопросы