I’ve got a spec that started failing a few days ago. It looks like it’s due to something about timzone? I don’t see a way that it’s my plugin’s fault, but maybe I’m missing something?
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
Running Rspec: plugins/discourse-topic-default-tag/spec/requests/actions_controller_spec.rb
Loading plugins while running specs
An error occurred while loading ./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 examples found.
Finished in 0.00005 seconds (files took 3.52 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
That sounds like you’re missing the timezone column in your user_options table. Have you run migrations recently in your test database? RAILS_ENV=test bin/rake db:migrate
But this will only work if you’re using the rails_helper. I suspect you need to add require "rails_helper" to the top of your spec file. That might resolve the other issues you’re seeing as well.
Edit: hmmm… maybe we should add --require rails_helper to the .rspec file so that it doesn’t need to be added manually
That sounds like the kind of stupid error that I would make! Alas, I do have require 'rails_helper'.
Maybe runing ./bin/rake autospec rather than bundle exec rake autospec was my problem, but it’s still failing at travis, and now this spec seems to be doing a bunch of stuff that I don’t understand for my one little spec, but I’ll just wait and see what happens.
Do you have a above that creates that user? (I’m not good enough to remember what that’s called or exactly how to do it. Oh, a fabricator, maybe. Did you fabricate that user?
Yep, user is fabbed. The user object is instantiated. The problem is within the sign_in method or something to do with the environment? (But that should be controlled)
Not sure why @env[CURRENT_USER_KEY] would be nil after signing in a user within the spec?
I notice that during the test run current_user is called multiple times during just one test, and at one point this attribute has a value, but not on every call, and not when it matters.
Ah thanks for verifying David! So it must be something perculiar about my dev setup!
No, there are no other plugins installed (outside of bundled ones and data explorer), but on the basis it works for you I’m inspired to set up a fresh clean docker dev instance and see if I can run it successfully there, cheers!