RSpec&设计身份验证不起作用

时间:2015-02-01 10:32:49

标签: ruby-on-rails ruby-on-rails-4 rspec devise bdd

我对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]

1 个答案:

答案 0 :(得分:2)

我不知道为什么一切正常如果添加空的&#39;它&#39;关键字。

但是,我知道为什么上下文&#39;授权&#39; 不能正常工作。 我试过了,代码工作正常。

规格文件。我换了2行。请看评论。

# 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

将Devise的测试助手添加到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