我对RSpec和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
过滤器之前的控制器
before_filter :authenticate_user!, except: [:index, :show]
答案 0 :(得分:2)
我不知道为什么一切正常如果添加空的&#39;它&#39;关键字。
但是,我知道为什么上下文&#39;授权&#39; 不能正常工作。 我试过了,代码工作正常。
# 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做 工厂:用户做 电子邮件&#39; test@email.com' 密码&#39;密码&#39; 结束 端
rspec spec/controllers/jobs_controller_spec.rb
..
Finished in 0.09395 seconds (files took 2.31 seconds to load)
2 examples, 0 failures