J’ai une spécification qui a commencé à échouer il y a quelques jours. Il semble que cela soit dû à quelque chose concernant le fuseau horaire ? Je ne vois pas comment cela pourrait être la faute de mon plugin, mais peut-être que je passe à côté de quelque chose ?
require 'rails_helper'
describe TopicDefaultTag::ActionsController do
before do
Jobs.run_immediately!
end
it 'can list' do
sign_in(Fabricate(:user))
get "/topic-default-tag/list.json"
expect(response.status).to eq(200)
end
end
Exécution de Rspec : plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb
Chargement des plugins lors de l'exécution des spécifications
Une erreur s'est produite lors du chargement de ./plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb.
Erreur de méthode :
undefined method `timezone' for #<UserOption:0x000055dd7af16ca8>
Did you mean? timeout
# ./app/models/user.rb:1343:in `create_user_option'
# (eval):19:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb:1:in `require'
# ./plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb:1:in `<top (required)>'
Aucun exemple trouvé.
Terminé en 0,00005 seconde (les fichiers ont pris 3,52 secondes à charger)
0 exemple, 0 échec, 1 erreur survenue en dehors des exemples
Cela ressemble à l’absence de la colonne timezone dans votre table user_options. Avez-vous exécuté les migrations récemment dans votre base de données de test ? RAILS_ENV=test bin/rake db:migrate
Pourquoi, non ! Non, je ne l’ai pas fait. J’ai exécuté les migrations sur la base de données de développement, mais pas sur celle de test. Merci, David !
Je ne comprends pas ce qui se passe actuellement, mais il est probable que ce problème ne soit pas aussi basique.
Vous devriez recevoir un message lorsque des migrations sont manquantes
Cependant, cela ne fonctionnera que si vous utilisez le rails_helper. Je soupçonne que vous devez ajouter require "rails_helper" en haut de votre fichier spec. Cela pourrait également résoudre les autres problèmes que vous rencontrez.
Édition : hmm… peut-être devrions-nous ajouter --require rails_helper au fichier .rspec afin qu’il ne soit plus nécessaire de l’ajouter manuellement
Cela ressemble à l’erreur stupide que j’aurais pu faire ! Hélas, j’ai bien require 'rails_helper'.
Peut-être que l’exécution de ./bin/rake autospec plutôt que bundle exec rake autospec était le problème, mais cela échoue toujours sur Travis. Maintenant, cette spécification semble faire beaucoup de choses que je ne comprends pas pour ma petite spécification, mais je vais attendre et voir ce qui se passe.
Avez-vous un ci-dessus qui crée cet utilisateur ? (Je ne suis pas assez doué pour me souvenir comment cela s’appelle ou comment faire exactement. Ah, un fabricant, peut-être. Avez-vous fabriqué cet utilisateur ?
(ou peut-être que je ne l’ai pas vu, car je suis sur mon téléphone)
Oui, l’utilisateur est créé. L’objet utilisateur est instancié. Le problème se situe dans la méthode sign_in ou dans l’environnement ? (Mais cela devrait être contrôlé)
Je ne sais pas pourquoi @env[CURRENT_USER_KEY] serait nil après avoir connecté un utilisateur dans la spécification ?
Je remarque que lors de l’exécution du test, current_user est appelé plusieurs fois au cours d’un seul test, et à un moment donné, cet attribut a une valeur, mais pas à chaque appel, et pas au moment où cela compte.
Avez-vous d’autres plugins installés qui pourraient interférer avec l’objet current_user ? J’ai cloné discourse-follow et cette spécification fonctionne pour moi :
❯ LOAD_PLUGINS=1 bin/rspec plugins/discourse-follow/spec/requests/follow_controller_spec.rb
Randomized with seed 28704
...
Finished in 0.45075 seconds (files took 3.34 seconds to load)
3 examples, 0 failures
Randomized with seed 28704
Ah, merci de l’avoir vérifié, David ! Cela doit donc être quelque chose de particulier à ma configuration de développement !
Non, il n’y a pas d’autres plugins installés (en dehors de ceux livrés par défaut et de l’explorateur de données), mais puisque cela fonctionne pour toi, cela m’inspire à configurer une nouvelle instance Docker de développement propre et à voir si je peux l’exécuter avec succès là-bas. Merci !