簡體   English   中英

未初始化的常量User(NameError)

[英]uninitialized constant User (NameError)

我有一個寶石,我將所有模型的核心部分從我的主應用程序移動到基本上是mixins或“Concerns”的模塊中。 因此允許我在各種應用程序的模型中使用gem中的那些mixin,從而允許我在多個應用程序中復制表和關系。

我正在測試此代碼以確保事情按預期工作,我遇到了一些問題。 如果我們查看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

此支持文件用於設置使用mixins的所有模型,並幫助“復制”應用程序表和關系以進行測試,但在更全局的層面,我現在正在測試用戶模型,因此我只有用戶模型在這里,后來病了更多:

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'

修復問題,以便在工廠之前創建模型類?

Dir[]不保證排序 - 結果通常取決於文件系統。 它可以是按字母順序排列的,可以是原始的unicode二進制排序,也可以是某些內部數據結構的順序。

如果您希望以特定順序返回的內容,則由您在問題結束時按照您的建議實施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM