web-dev-qa-db-fra.com

RuntimeError: impossible de modifier un tableau figé lors de l'exécution de rspec dans Rails 5.1

J'ai récemment mis à niveau vers Rails 5.1 depuis la v4.3 et j'obtiens maintenant cette erreur lors de l'exécution des tests:

An error occurred while loading 

./spec/controllers/admin/capacity_charges_controller_spec.rb.
Failure/Error: require File.expand_path('../../config/environment', __FILE__)

RuntimeError:
  can't modify frozen Array

Je l'obtiens pour chaque fichier de test. La ligne qui déclenche l'erreur provient de Rails_helper. J'ai vérifié Rails 5.1 exemples de dépôts et il n'y a rien de substantiellement différent dans notre version.

La trace de pile complète est:

RuntimeError:


can't modify frozen Array
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/actionpack-5.1.0/lib/action_dispatch/middleware/stack.rb:74:in `insert'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/actionpack-5.1.0/lib/action_dispatch/middleware/stack.rb:74:in `insert'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/actionpack-5.1.0/lib/action_dispatch/middleware/stack.rb:81:in `insert_after'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/request_store-1.3.2/lib/request_store/railtie.rb:5:in `block in <class:Railtie>'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/railties-5.1.0/lib/Rails/initializable.rb:30:in `instance_exec'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/railties-5.1.0/lib/Rails/initializable.rb:30:in `run'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/railties-5.1.0/lib/Rails/initializable.rb:59:in `block in run_initializers'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/railties-5.1.0/lib/Rails/initializable.rb:58:in `run_initializers'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/railties-5.1.0/lib/Rails/application.rb:353:in `initialize!'
# ./config/environment.rb:5:in `<top (required)>'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `block in require'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# ./spec/Rails_helper.rb:12:in `<top (required)>'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `block in require'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# ./spec/controllers/admin/capacity_charges_controller_spec.rb:3:in `<top (required)>'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `load'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `block in load'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/jeremynagel/.rvm/gems/[email protected]_EnergyLink/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `load'
13
jeznag

Il s'avère que cela a été causé par des échecs de test plus élevés dans la trace de la pile. Il était difficile de voir quelle était la cause principale car il y avait tellement de choses dans la console. Si vous rencontrez ce problème, je vous suggère d'utiliser --fail-fast pour ne pas être submergé de messages d'erreur récurrents. Vérifiez ensuite quelle est la première erreur.

17
jeznag

Pour moi, c'était une mise à jour FactoryBot de la version 4 à 5. Je n'ai pas vu l'avertissement de dépréciation parce que j'ai sauté des versions:

DEPRECATION WARNING: Static attributes will be removed in FactoryBot 5.0.
2
schmijos

Lorsque j'ai eu la même erreur avec un stacktrace similaire, cela m'a aidé à corriger une erreur de syntaxe dans les usines.

2
DonPaulie

Parfois, cette exception est également déclenchée si vous avez un mauvais héritage de nom de classe dans vos classes Ruby. N'oubliez pas que les contrôleurs, les modèles, etc., sont tous des constantes dans Ruby.

Ceci est un exemple du haut de ma tête d'une situation que j'ai rencontrée. La syntaxe réelle peut être désactivée, mais c'est le concept qui a causé mon problème.

module Admin
  class BaseController < ::ApplicationController
    ...
  end
end

# throws error, referencing constant that does not exist.
# Should be < ::Admin::BaseController
class OtherController < ::BaseController
end

Comme les autres, toute ma suite rspec échouerait avec l'erreur can't modify a frozen Array, qui n'est pas une trace de pile très utile dans ce cas, en soi.

J'espère que cela sauvera quelqu'un d'autre de passer des heures à traquer tout le reste!

1
Dan L

Dans le cas où cela aiderait quelqu'un à l'avenir, c'était un problème de connexion à la base de données (Postgresql dans mon cas). Rendez-vous sur config/database.yml fichier et fourniture username: et password: <la valeur par défaut est toor>

Ajoutez ceci dans le development: groupe.

1
Khushwanth

Dans mon cas, Rails_admin récent a nécessité quelques ajouts

RuntimeError: les middlewares requis pour RailsAdmin ne sont pas ajoutés
Pour corriger ces problèmes, ajoutez

config.middleware.use ActionDispatch::Flash

à config/application.rb.

Ensuite, toutes les rspecs sont redevenues vertes.

0
Kiryl Plyashkevich

Dans mon cas, cela était dû à un message de conflit git (celui comme >>>> ... === ... <<<<) Que j'ai manqué de résoudre, il y a donc eu une erreur de syntaxe lorsque Rspec a essayé de charger cette classe.

L'option de ligne de commande --fail-fast N'aide pas dans ce cas car l'erreur se produit plus haut dans la pile des appels, mais vous pouvez voir l'erreur réelle en exécutant simplement n'importe quel fichier de spécification.

0
trushkevich

J'ai essayé de mettre à jour de Rails 3 à Rails 5. Je viens de définir config.eager_load option et cela a aidé. Soit vers false ou true. Pas nil, s'il vous plaît

0
Orel Sokolov