簡體   English   中英

`load_missing_constant':未初始化的常量AuthenticatedTestHelper(NameError)

[英]`load_missing_constant': uninitialized constant AuthenticatedTestHelper (NameError)

我有一個舊的Rails項目,需要更改甚至更新。

我的寶石清單如下所示:

*** LOCAL GEMS ***

actionmailer (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
actionpack (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
activerecord (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
activeresource (2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
activesupport (3.2.9, 2.3.14, 2.3.11, 2.3.8, 2.3.5, 2.3.2)
addressable (2.3.2)
BlueCloth (1.0.1)
bourne (1.1.2)
bundler (1.2.3)
childprocess (0.3.6)
ffi (1.2.0)
i18n (0.6.1)
json (1.7.5)
libwebsocket (0.1.7.1)
metaclass (0.0.1)
mocha (0.10.5)
multi_json (1.5.0)
mysql (2.8.1)
paperclip (2.3.1.1)
rack (1.1.3, 1.0.1)
rails (2.3.14, 2.3.2)
rake (0.8.7)
rdoc (3.12)
restful_authentication (1.1.6)
rspec (1.3.1)
ruby-net-ldap (0.0.4)
rubygems-bundler (1.1.0)
rubyzip (0.9.9)
rvm (1.11.3.5)
selenium-client (1.2.18)
selenium-webdriver (2.27.2)
shoulda (2.11.3)
shoulda-context (1.0.2)
shoulda-matchers (1.4.2)
thoughtbot-shoulda (2.11.1)
websocket (1.0.6)

運行rake test我得到:

/Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/activesupport-2.3.14/lib/active_support/dependencies.rb:469:in `load_missing_constant': uninitialized constant AuthenticatedTestHelper (NameError)
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/activesupport-2.3.14/lib/active_support/dependencies.rb:106:in `const_missing'
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/activesupport-2.3.14/lib/active_support/dependencies.rb:118:in `const_missing'
    from ./test/test_helper.rb:4
    from ./test/functional/admin/articles_controller_test.rb:1:in `require'
    from ./test/functional/admin/articles_controller_test.rb:1
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `load'
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `each'
    from /Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5
/Users/noah/.rvm/rubies/ruby-1.8.7-p371/bin/ruby -I"lib:test" "/Users/noah/.rvm/gems/ruby-1.8.7-p371@website/gems/rake-0.8.7/lib/rake/rake_test_loader.rb"  
Errors running test:units and test:functionals!

這是我的測試助手的第一部分:

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
include AuthenticatedTestHelper

include AuthenticatedTestHelper任何地方都會失敗。 關於為什么這樣做的任何想法?

更新:

我相信我的問題是restful_authentication無法生成將提供AuthenticatedTestHelper的文件。

在依賴項內部,我具有以下內容:

qualified_name = qualified_name_for from_mod, const_name
      path_suffix = qualified_name.underscore
      name_error = NameError.new("uninitialized constant #{qualified_name}")

      file_path = search_for_file(path_suffix)
      if file_path && ! loaded.include?(File.expand_path(file_path)) # We found a matching file to load
        require_or_load file_path
        raise LoadError, "Expected #{file_path} to define #{qualified_name}" unless uninherited_const_defined?(from_mod, const_name)
        return from_mod.const_get(const_name)
      elsif mod = autoload_module!(from_mod, const_name, qualified_name, path_suffix)
        return mod
      elsif (parent = from_mod.parent) && parent != from_mod &&
            ! from_mod.parents.any? { |p| uninherited_const_defined?(p, const_name) }
        # If our parents do not have a constant named +const_name+ then we are free
        # to attempt to load upwards. If they do have such a constant, then this
        # const_missing must be due to from_mod::const_name, which should not
        # return constants from from_mod's parents.
        begin
          return parent.const_missing(const_name)
        rescue NameError => e
          raise unless e.missing_name? qualified_name_for(parent, const_name)
          raise name_error
        end
      else
        puts file_path #added this line
        raise name_error
      end
    end

並且我添加了puts file_path這一行,它為nil,所以rails也不知道這個文件在哪里。 有任何想法嗎?

通常,此模塊應位於lib/authenticated_test_helper.rb

如果找不到或無法找到它,則可以在該文件中創建一個空模塊,然后逐步實現或存根。

但是,如果您打算升級到Rails 3,則無論如何都必須選擇另一個身份驗證框架(Authlogic,Devise),因為restful_authentication似乎不適用於Rails 3。

PS:從代碼dependencies.rb不幫你。 它僅包含從常量(在您的情況下為=)中導出文件名的代碼。它只是失敗,因為在加載路徑中沒有名為authenticated_test_helper文件。

暫無
暫無

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

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