У меня есть драгоценный камень, где я переместил основные части всех моделей из моего основного приложения в модули, которые по существу являются миксинами или «проблемами». Таким образом, позволяя мне использовать эти миксины из драгоценного камня в моделях различных приложений и, таким образом, позволять мне копировать таблицы и отношения между несколькими приложениями.Неинициализированная константа Пользователь (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'
исправить этот вопрос, так что классы модели созданы до того, как заводы?