Все тесты, выбрасывающие TypeError: неявное преобразование nil в String

ОБНОВЛЕНИЕ 20180209: Я создал новое фиктивное приложение с тем, что идет с начальной установкой Rails 5.1.4 (которая включает в себя мини-тест 5.11.3) и тесты выполнены без проблем. Собираюсь продолжать экспериментировать с гемфайлом, чтобы посмотреть, не смогу ли я выяснить, что в мире может вызывать эту проблему...

Если у вас есть идеи или советы, пожалуйста, дайте мне знать!


Недавно я начал тестировать новую часть своей кодовой базы и обнаружил очень важную проблему. По какой-то причине каждый тест теперь выдает ошибку. Если посмотреть на трассировку, то по какой-то причине приведенное название / название моих тестов вызывает проблему. Возвращение и запуск тестов, которые, как я знаю, проходили (правда, в более ранних версиях gem), к сожалению, дают те же результаты, как показано ниже для модели User.

Я перепробовал все, что я знаю, включая полное удаление и переустановку RVM, Rails и Ruby. Я даже пытался создать версию Minitest для более ранней сборки, например 10.5.3, но все равно не повезло. Я провел большую часть дня, пытаясь это исправить; Я в своем уме и остро нуждаюсь в помощи! Хотя я усвоил трудный путь, который мне теперь нужен, чтобы явно защитить версию от ВСЕХ моих драгоценных камней;)

Заранее спасибо! Пожалуйста, дайте мне знать, если вам нужно, чтобы я включил больше файлов / фрагментов. Я сделаю все возможное, чтобы ответить на любые вопросы, насколько позволяет мое расписание, надеюсь, в течение 24 часов.

Возвращенный след:

Е

Ошибка: UserTest#test_should_be_valid: TypeError: нет неявного преобразования nil в строку

/home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in method': undefined methodtest_should_be_valid 'для класса Minitest::Result' (NameError) from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:informat_rerun_snippet'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:23:in record' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:803:inблок в записи 'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:802:in each' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:802:inrecord 'от /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:334:in run_one_method' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:321:inблок (2 уровня) в прогоне "из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:320:in each' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:320:inзаблокировать в работе "из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:360:in on_signal' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:347:inwith_info_handler 'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:319:in run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/railties-5.1.4/lib/rails/test_unit/line_filtering.rb:9:inзапустить 'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:159:in block in __run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:159:inmap 'from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:159:in __run' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:136:inзапустить 'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/minitest-5.11.3/lib/minitest.rb:63:in block in autorun' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:171:infork 'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:171:in serve' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:141:inзаблокировать в работе "из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:135:in loop' from /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application.rb:135:inзапустить 'из /home/blake/.rvm/gems/ruby-2.4.1@land_app/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in <top (required)>' from /home/blake/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:inrequire 'from /home/blake/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in require' from -e:1:in'

Это из довольно стандартного теста пользовательской модели, который раньше не вызывал проблем...

user.rb

class User < ApplicationRecord
  attr_accessor :remember_token, :activation_token, :reset_token
  before_save   :downcase_email
  before_create :create_activation_digest
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX =  /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  has_secure_password
  validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
...
end

Тест / user_test.rb

require 'test_helper'

class UserTest < ActiveSupport::TestCase

  def setup
    @user = User.new(name: "Example User", email: "user@example.com",
    password: "password", password_confirmation: "password")
  end

  test "should be valid" do
    assert @user.valid?
  end
...
end

test_helper.rb

ENV['RAILS_ENV'] ||= 'test'

# NOTE: Disabling simplecov, trying to see if it is what is interfering with my backtrace_silencer settings
# require 'simplecov'
# SimpleCov.start
# require 'simplecov-json'
# SimpleCov.formatter = SimpleCov::Formatter::JSONFormatter

require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

# Integrate AASM gem's custom testing methods into minitest
require 'aasm/minitest'

# NOTE: Minitest-reporters may overwrite backtrace_silencer settings. The below is supposed to force m-r to use the
# default Rails Minitest.backtrace_filter instead, though I'm still having trouble...
# https://github.com/kern/minitest-reporters
# require 'minitest/reporters'
# Minitest::Reporters.use!(
#   Minitest::Reporters::ProgressReporter.new,
#   ENV,
#   Minitest.backtrace_filter)
# require 'fileutils'

class CarrierWave::Mount::Mounter
  def store!
    # Not storing uploads in the tests
  end
end


class ActiveSupport::TestCase
  include ApplicationHelper
  include ActionDispatch::TestProcess

  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # https://github.com/carrierwaveuploader/carrierwave/wiki/Using-Carrierwave-with-Minitest-and-Rails-5
  # CarrierWave setup and teardown
  carrierwave_template = Rails.root.join('test', 'fixtures', 'files')
  carrierwave_root = Rails.root.join('test', 'support', 'carrierwave')
  carrierwave_cache_dir = Rails.root.join('test', 'support', 'carrierwave', 'carrierwave_cache')
  ##
  CarrierWave.configure do |config|
    config.root = carrierwave_root
    config.enable_processing = false
    config.storage = :file
    config.cache_dir = carrierwave_cache_dir
  end
  ##
  puts "*** Copying ***\n #{carrierwave_template.join('uploads').to_s}\n to\n #{carrierwave_root.to_s}"
  FileUtils.cp_r carrierwave_template.join('uploads'), carrierwave_root
  ##
  at_exit do
    puts "*** Removing carrierwave test directories ***"
    Dir.glob(carrierwave_root.join('*')).each do |dir|
      #puts " #{dir}"
      FileUtils.remove_entry(dir)
    end
  end

  # CarrierWave.root = Rails.root.join('test/fixtures/files')

  # FIXME: This seems to be causing some issues...
  # def after_teardown
  #   super
  #   # Default clean schedule is one day, this changes is to immediately after use
  #   CarrierWave.clean_cached_files!(0)
  # end

  # Returns true if a test user is logged in
  def is_logged_in?
    !session[:user_id].nil?
  end

  # log in as particular user
  def log_in_as(user)
    session[:user_id] = user.id
  end
end

class ActionDispatch::IntegrationTest

  # Log in as a particular user
  def log_in_as(user, password: 'password', remember_me: '1')
    post login_path, params: { session: { email: user.email,
                                          password: password,
                                          remember_me: remember_me } }
  end
end

Я сейчас бегаю

  • Ruby 2.4.1
  • Rails 5.1.4

Мой список драгоценных камней выглядит следующим образом:

  * CFPropertyList (2.3.6)
  * aasm (4.12.3)
  * actioncable (5.1.4)
  * actionmailer (5.1.4)
  * actionpack (5.1.4)
  * actionview (5.1.4)
  * activejob (5.1.4)
  * activemodel (5.1.4)
  * activerecord (5.1.4)
  * activesupport (5.1.4)
  * area (0.10.0)
  * arel (8.0.0)
  * ast (2.4.0)
  * autoprefixer-rails (7.2.5)
  * bcrypt (3.1.11)
  * better_errors (2.4.0)
  * bindex (0.5.0)
  * binding_of_caller (0.8.0)
  * bootstrap-sass (3.3.7)
  * bootstrap-will_paginate (1.0.0)
  * builder (3.2.3)
  * bullet (5.7.2)
  * bundler (1.16.1)
  * carrierwave (1.2.2)
  * carrierwave-imageoptimizer (1.4.0)
  * coderay (1.1.2)
  * coffee-rails (4.2.2)
  * coffee-script (2.4.1)
  * coffee-script-source (1.12.2)
  * concurrent-ruby (1.0.5)
  * crass (1.0.3)
  * debug_inspector (0.0.3)
  * domain_name (0.5.20170404)
  * erubi (1.7.0)
  * excon (0.60.0)
  * execjs (2.7.0)
  * faker (1.8.7)
  * fastercsv (1.5.5)
  * ffi (1.9.21)
  * fission (0.5.0)
  * flamegraph (0.9.5)
  * fog (1.42.0)
  * fog-aliyun (0.2.0)
  * fog-atmos (0.1.0)
  * fog-aws (2.0.0)
  * fog-brightbox (0.14.0)
  * fog-cloudatcost (0.1.2)
  * fog-core (1.45.0)
  * fog-digitalocean (0.3.0)
  * fog-dnsimple (1.0.0)
  * fog-dynect (0.0.3)
  * fog-ecloud (0.3.0)
  * fog-google (0.1.0)
  * fog-internet-archive (0.0.1)
  * fog-joyent (0.0.1)
  * fog-json (1.0.2)
  * fog-local (0.4.0)
  * fog-openstack (0.1.23)
  * fog-ovirt (0.1.2)
  * fog-powerdns (0.1.1)
  * fog-profitbricks (4.1.1)
  * fog-rackspace (0.1.5)
  * fog-radosgw (0.0.5)
  * fog-riakcs (0.1.0)
  * fog-sakuracloud (1.7.5)
  * fog-serverlove (0.1.2)
  * fog-softlayer (1.1.4)
  * fog-storm_on_demand (0.1.1)
  * fog-terremark (0.1.0)
  * fog-vmfusion (0.1.0)
  * fog-voxel (0.1.0)
  * fog-vsphere (1.13.1)
  * fog-xenserver (0.3.0)
  * fog-xml (0.1.3)
  * formatador (0.2.5)
  * fuzzy_match (2.1.0)
  * geocoder (1.4.5)
  * globalid (0.4.1)
  * guard (2.14.2)
  * guard-compat (1.2.1)
  * guard-minitest (2.4.6)
  * http-cookie (1.0.3)
  * i18n (0.9.3)
  * image_optimizer (1.7.2)
  * inflecto (0.0.2)
  * ipaddress (0.8.3)
  * jbuilder (2.7.0)
  * jquery-rails (4.3.1)
  * json (2.1.0)
  * listen (3.1.5)
  * loofah (2.1.1)
  * lumberjack (1.0.12)
  * mail (2.7.0)
  * memory_profiler (0.9.8)
  * method_source (0.8.2)
  * mime-types (3.1)
  * mime-types-data (3.2016.0521)
  * mini_magick (4.8.0)
  * mini_mime (1.0.0)
  * mini_portile2 (2.3.0)
  * minitest (5.11.3)
  * multi_json (1.13.1)
  * mustermann (1.0.1)
  * nenv (0.3.0)
  * netrc (0.11.0)
  * nio4r (2.2.0)
  * nokogiri (1.8.2)
  * notiffany (0.1.1)
  * parser (2.4.0.2)
  * pg (0.21.0)
  * pry (0.10.4)
  * pry-nav (0.2.4)
  * pry-rails (0.3.6)
  * puma (3.11.2)
  * rack (2.0.4)
  * rack-mini-profiler (0.10.7)
  * rack-protection (2.0.0)
  * rack-test (0.8.2)
  * rails (5.1.4)
  * rails-controller-testing (1.0.2)
  * rails-dom-testing (2.0.3)
  * rails-html-sanitizer (1.0.3)
  * railties (5.1.4)
  * rake (12.3.0)
  * rb-fsevent (0.10.2)
  * rb-inotify (0.9.10)
  * rbovirt (0.1.5)
  * rbvmomi (1.11.6)
  * rest-client (2.0.2)
  * ruby_dep (1.5.0)
  * sass (3.5.5)
  * sass-listen (4.0.0)
  * sass-rails (5.0.7)
  * shellany (0.0.1)
  * simple_form (3.5.0)
  * sinatra (2.0.0)
  * slop (3.6.0)
  * solargraph (0.17.1)
  * spring (2.0.2)
  * spring-watcher-listen (2.0.1)
  * sprockets (3.7.1)
  * sprockets-rails (3.2.1)
  * stackprof (0.2.11)
  * thor (0.20.0)
  * thread_safe (0.3.6)
  * tilt (2.0.8)
  * trollop (2.1.2)
  * turbolinks (5.1.0)
  * turbolinks-source (5.1.0)
  * tzinfo (1.2.5)
  * uglifier (4.1.6)
  * unf (0.1.4)
  * unf_ext (0.0.7.5)
  * uniform_notifier (1.11.0)
  * web-console (3.5.1)
  * websocket-driver (0.6.5)
  * websocket-extensions (0.1.3)
  * will_paginate (3.1.6)
  * xml-simple (1.1.5)
  * yard (0.9.12)

1 ответ

Решение

Разобрались с этим, вернувшись к более раннему коммиту, когда все работало как положено, и загрузили необходимые обновления через $ git checkout <branch> <file1> <file2> подход.

Если бы мне пришлось угадывать, я думаю, что проблема, с которой я столкнулся, могла иметь какое-то отношение к моему промежуточному обновлению до 2.5.0 через RVM, которое вызвало больше головной боли, чем оно того стоило (не по вине Rails или даже по RVM, поскольку 2.5.0 не пока официально не поддерживается RVM).

Другие вопросы по тегам