2015-02-20 4 views
0

У меня есть драгоценный камень, где я переместил основные части всех моделей из моего основного приложения в модули, которые по существу являются миксинами или «проблемами». Таким образом, позволяя мне использовать эти миксины из драгоценного камня в моделях различных приложений и, таким образом, позволять мне копировать таблицы и отношения между несколькими приложениями.Неинициализированная константа Пользователь (NameError)

Я тестировал этот код, чтобы убедиться, что все работает должным образом, и я столкнулся с некоторыми проблемами. Если мы посмотрим на rails_helper, мы можем видеть, что я загрузки фабрики девочка и некоторые другие вещи (это только верхняя часть rails_helper.rb - я могу разместить остальное, если его действительно актуальны)

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

ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => 'test.sqlite3') 
load(File.dirname(__FILE__) + "/schema.rb") 

Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } 

Одна вещь что я загружаю базу данных на основе существующей схемы и использую sqlite3 без учетных данных - потому что это просто для тестов - и я загружаю заводскую девушку и каталог поддержки.

Так что, если мы посмотрим на каталог поддержки У меня есть два файла:

factories.rb

FactoryGirl.define do 
    sequence :user_email do |n| 
    "user#{n}@example.com" 
    end 

    # Allows for multiple user names 
    sequence :user_name do |n| 
    "user#{n}" 
    end 

    sequence :permission_name do |n| 
    "can_read#{n}" 
    end 

    sequence :role_name do |n| 
    "Member#{n}" 
    end 


    factory :user, :class => User do 
    first_name 'Adam' 
    last_name 'Something' 
    user_name {generate :user_name} 
    email {generate :user_email} 
    password 'somePasswordThat_Is$ecure10!' 
    end 
end 

model_classes.rb

Этот файл поддержки используется для настройки всех моделей, которые используют Примеси и чтобы помочь «реплицировать» таблицы приложений и отношения для тестирования, но на более глобальном уровне, прямо сейчас я тестирую модель пользователя, поэтому у меня есть только модель пользователя, позже у больного больше:

require 'core_models/models/user' 

class User < ActiveRecord::Base 
    include CoreModels::Models::User 
end 

С загруженными файлами поддержки его время мы пишем тест, требующий использования заводской девушки.

context "Validation checks" do 
    it "Validate a valid user object" do 
    FactoryGirl.build(:user).should be_valid 
    end 
    end 

Мы просто хотим создать пользовательский объект, и он должен быть действительным. Все проверки, отношения и т. Д. Обрабатываются в CoreModels::Models::User, поэтому просто проверялось, что функциональность все еще работает по назначению.

Вопрос в том, когда я запускаю этот тест:

$ bin/rspec 
-- enable_extension("plpgsql") 
    -> 0.0018s 
-- create_table("friendly_id_slugs", {:force=>true}) 
    -> 0.0045s 
-- add_index("friendly_id_slugs", ["slug", "sluggable_type", "scope"], {:name=>"index_friendly_id_slugs_on_slug_and_sluggable_type_and_scope", :unique=>true, :using=>:btree}) 
    -> 0.0016s 
-- add_index("friendly_id_slugs", ["slug", "sluggable_type"], {:name=>"index_friendly_id_slugs_on_slug_and_sluggable_type", :using=>:btree}) 
    -> 0.0019s 
-- add_index("friendly_id_slugs", ["sluggable_id"], {:name=>"index_friendly_id_slugs_on_sluggable_id", :using=>:btree}) 
    -> 0.0026s 
-- add_index("friendly_id_slugs", ["sluggable_type"], {:name=>"index_friendly_id_slugs_on_sluggable_type", :using=>:btree}) 
    -> 0.0028s 
-- create_table("group_memberships", {:force=>true}) 
    -> 0.0050s 
-- create_table("groups", {:force=>true}) 
    -> 0.0027s 
-- add_index("groups", ["slug"], {:name=>"index_groups_on_slug", :using=>:btree}) 
    -> 0.0013s 
-- create_table("groups_roles", {:force=>true}) 
    -> 0.0027s 
-- create_table("permissions", {:force=>true}) 
    -> 0.0028s 
-- add_index("permissions", ["slug"], {:name=>"index_permissions_on_slug", :using=>:btree}) 
    -> 0.0018s 
-- create_table("roles", {:force=>true}) 
    -> 0.0035s 
-- add_index("roles", ["slug"], {:name=>"index_roles_on_slug", :using=>:btree}) 
    -> 0.0016s 
-- create_table("roles_permissions", {:force=>true}) 
    -> 0.0026s 
-- create_table("users", {:force=>true}) 
    -> 0.0026s 
-- add_index("users", ["slug"], {:name=>"index_users_on_slug", :using=>:btree}) 
    -> 0.0016s 
-- initialize_schema_migrations_table() 
    -> 0.0045s 
/Users/Adam/Documents/Rails-Projects/core_models/spec/support/factories.rb:20:in `block in <top (required)>': uninitialized constant User (NameError) 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/factory_girl-4.5.0/lib/factory_girl/syntax/default.rb:49:in `instance_eval' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/factory_girl-4.5.0/lib/factory_girl/syntax/default.rb:49:in `run' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/factory_girl-4.5.0/lib/factory_girl/syntax/default.rb:7:in `define' 
    from /Users/Adam/Documents/Rails-Projects/core_models/spec/support/factories.rb:1:in `<top (required)>' 
    from /Users/Adam/Documents/Rails-Projects/core_models/spec/rails_helper.rb:11:in `block in <top (required)>' 
    from /Users/Adam/Documents/Rails-Projects/core_models/spec/rails_helper.rb:11:in `each' 
    from /Users/Adam/Documents/Rails-Projects/core_models/spec/rails_helper.rb:11:in `<top (required)>' 
    from /Users/Adam/Documents/Rails-Projects/core_models/spec/models/user_spec.rb:1:in `require' 
    from /Users/Adam/Documents/Rails-Projects/core_models/spec/models/user_spec.rb:1:in `<top (required)>' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `block in load_spec_files' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `each' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load_spec_files' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:96:in `setup' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:84:in `run' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:69:in `run' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:37:in `invoke' 
    from /Users/Adam/Documents/Rails-Projects/core_models/.bundle/gems/gems/rspec-core-3.1.7/exe/rspec:4:in `<top (required)>' 
    from bin/rspec:16:in `load' 
    from bin/rspec:16:in `<main>' 

Так как вы можете видеть, он загружает базу данных, а затем бум умирает, потому что он понятия не имеет, что User является

(?) Так что я задал вопрос:

Есть ли проблема с загрузкой, когда фабрика загружается до model_clases? Было бы целесообразно загрузить их в алфавитном порядке. Если то дело будет настраивать там порядок загрузки, выполнив:

require 'support/model_classes.rb' 
require 'support/factories.rb' 

исправить этот вопрос, так что классы модели созданы до того, как заводы?

ответ

0

Dir[] не дает никаких гарантий относительно заказа - результаты будут в основном зависящими от файловой системы. Он может быть в алфавитном порядке, это может быть двоичный порядок необработанного юникода или некоторый порядок, соответствующий некоторой внутренней структуре данных.

Если вы хотите, чтобы все было возвращено в определенном порядке, вам решать, как вы предлагаете в конце вашего вопроса.

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