【问题标题】:NameError: uninitialized constant Minitest::VERSIONNameError: 未初始化的常量 Minitest::VERSION
【发布时间】:2014-06-16 15:58:34
【问题描述】:

我使用的是 Rails 4.1 和 Ruby 2.0.0。我正在尝试使用minitest-rails 设置测试,但遇到了这个奇怪的错误。当我包括:

require 'minitest/spec'

在我的“spec_helper”文件中,它给了我一个 NameError: uninitialized constant Minitest::VERSION 错误。当我注释掉这一行时,一切似乎都正常。奇怪的是,“minitest/autorun”也在那里,没有引起任何问题。也许你们可以对这里发生的事情有所了解。

spec_helper.rb:

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

require 'minitest/spec'
require 'minitest/autorun'
require 'minitest-rails'
require 'minitest-rails-capybara'

Rakefile:

    require File.expand_path('../config/application', __FILE__)

    Pinteresting::Application.load_tasks

    namespace :test do
      task :run do
        ENV["RACK_ENV"] = "test"
        $LOAD_PATH.unshift("lib", "spec")
        if ARGV[1]
          require_relative ARGV[1]
        else
          Dir.glob("./spec/**/*_spec.rb").each { |file| require file }
        end
      end
    end

.spec:

    require "spec_helper"

    describe "Test" do
      describe "When two is equal to two" do 
        it "asserts true" do
          assert_equal(2, 2)
        end
      end
    end

堆栈跟踪:

    nbp-93-202:pinteresting Frank$ rake test:run
    rake aborted!
    NameError: uninitialized constant Minitest::VERSION
    /usr/local/rvm/gems/ruby-2.0.0-p481/gems/minitest-5.3.4/lib/minitest/unit.rb:22:in `<class:Unit>'
    /usr/local/rvm/gems/ruby-2.0.0-p481/gems/minitest-5.3.4/lib/minitest/unit.rb:21:in `<module:Minitest>'
    /usr/local/rvm/gems/ruby-2.0.0-p481/gems/minitest-5.3.4/lib/minitest/unit.rb:20:in `<top (required)>'
    /usr/local/rvm/gems/ruby-2.0.0-p481/gems/minitest-5.3.4/lib/minitest/spec.rb:1:in `<top (required)>'
    /Users/Frank/Desktop/pinteresting/spec/spec_helper.rb:4:in `<top (required)>'
    /Users/Frank/Desktop/pinteresting/spec/diagnostic_spec.rb:1:in `<top (required)>'
    /Users/Frank/Desktop/pinteresting/Rakefile:12:in `block (3 levels) in <top (required)>'
    /Users/Frank/Desktop/pinteresting/Rakefile:12:in `each'
    /Users/Frank/Desktop/pinteresting/Rakefile:12:in `block (2 levels) in <top (required)>'
    Tasks: TOP => test:run

【问题讨论】:

  • 您在运行bundle install 时是否看到此错误?包括堆栈跟踪会有所帮助
  • 我添加了堆栈跟踪
  • 如果改变requires中的顺序,即先require'minitest/autorun'再'minitest/spec',是否还会出现错误?
  • 我把它们调换了,就成功了,谢谢。

标签: ruby-on-rails ruby minitest


【解决方案1】:

有趣的是,如果尝试运行或要求仅包含两个要求 minitest/specminitest/autorun 的文件,解释器会发出警告说 you should require 'minitest/autorun' instead or add "gem 'minitest'" before require 'minitest/autorun',尽管它不会向我上升 NameError

所以切换 require 语句(为了首先需要 minitest/autorun)似乎可以解决问题。首先要求 minitest 似乎也可以解决问题。

【讨论】:

    【解决方案2】:

    我认为您可以通过简化实现来解决此警告。在spec/spec_helper.rb:

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

    您缺少rails/test_help 的要求。您是否出于特定原因将其删除?

    Rakefile:

    # Add your own tasks in files placed in lib/tasks ending in .rake,
    # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
    
    require File.expand_path('../config/application', __FILE__)
    
    Rails.application.load_tasks
    
    Rails::TestTask.new("test:spec" => "test:prepare") do |t|
      t.pattern = "spec/**/*_spec.rb"
    end
    
    Rake::Task["test:run"].enhance ["test:spec"]
    

    现在运行$ rake test:spec 运行所有规范,或运行$ rake test 运行所有测试。将 rake 任务保留在 test 命名空间下的原因是因为这是 Spring 使用运行测试环境的关键。 Spring 使用任务命名空间,而不是目录名。

    【讨论】:

      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多