Tengo una especificación que comenzó a fallar hace unos días. Parece que se debe a algo relacionado con el timezone? No veo cómo pueda ser culpa de mi plugin, pero ¿quizás me estoy perdiendo algo?
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
Ejecutando Rspec: plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb
Cargando plugins mientras se ejecutan las especificaciones
Ocurrió un error al cargar ./plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb.
Failure/Error: UserOption.create!(user_id: id)
NoMethodError:
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)>'
No se encontraron ejemplos.
Finalizado en 0.00005 segundos (los archivos tardaron 3.52 segundos en cargarse)
0 ejemplos, 0 fallos, 1 error ocurrido fuera de los ejemplos
Parece que te falta la columna de zona horaria en tu tabla user_options. ¿Has ejecutado las migraciones recientemente en tu base de datos de pruebas? RAILS_ENV=test bin/rake db:migrate
Deberías recibir un mensaje cuando falten migraciones
Pero esto solo funcionará si estás usando el rails_helper. Sospecho que necesitas agregar require "rails_helper" al principio de tu archivo spec. Eso también podría resolver los otros problemas que estás viendo.
Edición: hmmm… quizás deberíamos agregar --require rails_helper al archivo .rspec para que no sea necesario añadirlo manualmente
¡Eso suena como el tipo de error tonto que yo cometería! Por desgracia, sí tengo require 'rails_helper'.
Quizás ejecutar ./bin/rake autospec en lugar de bundle exec rake autospec fue mi problema, pero sigue fallando en Travis. Ahora, esta especificación parece estar haciendo un montón de cosas que no entiendo para mi pequeña prueba, pero esperaré a ver qué pasa.
¿Tienes un arriba que cree ese usuario? (No soy lo suficientemente bueno para recordar cómo se llama o cómo hacerlo exactamente. Oh, ¿un fabricador? ¿Fabricaste ese usuario?
(O tal vez no lo vi, ya que estoy usando el teléfono).
Sí, el usuario está creado. El objeto de usuario se ha instanciado. El problema está dentro del método sign_in o tiene algo que ver con el entorno? (Pero eso debería estar controlado)
No estoy seguro de por qué @env[CURRENT_USER_KEY] sería nil después de iniciar sesión en un usuario dentro de la especificación.
Noto que durante la ejecución de la prueba current_user se llama varias veces durante una sola prueba, y en un momento dado este atributo tiene un valor, pero no en cada llamada, y no cuando importa.
¡Ah, gracias por verificarlo, David! Entonces debe ser algo peculiar de mi configuración de desarrollo.
No, no hay otros plugins instalados (además de los incluidos y el explorador de datos), pero dado que funciona para ti, me he inspirado a configurar una nueva instancia limpia de Docker para desarrollo y ver si puedo ejecutarla correctamente allí. ¡Salud!