2014-06-16 2 views
2

Я использую Rails 4.1 и Ruby 2.0.0. Я пытаюсь настроить тестирование с помощью minitest-rails, и я столкнулся с этой странной ошибкой. Когда я включаю:NameError: неинициализированная константа Minitest :: VERSION

require 'minitest/spec' 

В моем 'spec_helper' файл, он дает мне NameError: UNINITIALIZED постоянную ошибку 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 
+0

Вы видите эту ошибку при запуске 'bundle install'? Включение трассировки стека поможет –

+0

Я добавил трассировку стека – Idyllize

+0

Возникает ли ошибка, если вы изменили порядок в запросе, то есть сначала требуется «minitest/autorun», а затем «minitest/spec»? – eduardo

ответ

3

Интересно, что если попытаться запустить или потребовать файл только с двумя, то требуется minitest/spec и minitest/autorun, интерпретатор предупреждает, что you should require 'minitest/autorun' instead or add "gem 'minitest'" before require 'minitest/autorun', хотя он не поднимает NameError.

Так что переключение требовательных утверждений вокруг (для того, чтобы сначала потребовать minitest/autorun), похоже, делает трюк. Требование minitest в первую очередь, похоже, делает трюк.

0

Я думаю, что вы можете устранить это предупреждение, сделав вашу реализацию проще. В 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 запустить все тесты. Причина сохранения задач рейка под пространством имен test заключается в том, что именно эти клавиши Spring используют рабочую тестовую среду. Spring использует пространство имен задач, а не имя каталога.

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