I having very weird problem with RSpec and Devise
describe 'GET edit:/id' do
before do
@job = FactoryGirl.create(:job)
get(:edit, id: @job.id)
end
context 'as not authorized' do
before { logout(:user) }
it 'redirects to login page' do
expect(response).to redirect_to new_user_session_path
end
end
#it '' do end << works if i uncomment this line
context 'as authorized' do
before { login_as(user) }
it 'renders edit tempalte' do
expect(response).to render_template :edit
# Here I get response.status 302. It must be 200, controller thinks that user is not authorized.
# But if add empty 'it' keyword, everything works fine
end
end
end
Controller's before filter
before_filter :authenticate_user!, except: [:index, :show]
I don't know why everything works fine if add empty 'it' keyword.
But, I know why context 'as authorized' doesn't work fine. I tried it and the code works fine.
# spec/controllers/jobs_controller.rb
require 'rails_helper'
RSpec.describe JobsController, :type => :controller do
describe 'GET edit:/id' do
context 'as not authorized' do
before do
@job = FactoryGirl.create(:job)
get(:edit, id: @job.id)
end
it 'redirects to login page' do
expect(response).to redirect_to new_user_session_path
end
end
context 'as authorized' do
before do
user = FactoryGirl.create(:user) # add here
sign_in(user) # change
@job = FactoryGirl.create(:job)
get(:edit, id: @job.id)
end
it 'renders edit tempalte' do
expect(response).to render_template :edit
end
end
end
end
rails_helper.rb
.# spec/rails_helper.rb
# Add this line to provide Devise's test helpers
# Ref: https://github.com/plataformatec/devise#test-helpers
config.include Devise::TestHelpers, type: :controller
# spec/factories/users.rb
FactoryGirl.define do
factory :user do
email 'test@email.com'
password 'password'
end
end
rspec spec/controllers/jobs_controller_spec.rb
..
Finished in 0.09395 seconds (files took 2.31 seconds to load)
2 examples, 0 failures