2017-05-05 71 views
0

我在自己的控制器中重寫了SessionsController,並嘗試使用RSpec進行測試。拳,我設置與如何使用RSpec測試Devise Sessions控制器

@request.env["devise.mapping"] = Devise.mappings[:user] 

我的規格設計:

require 'rails_helper' 

需要 'authentication_helper'

RSpec.describe用戶:: SessionsController,類型:控制器不 包括AuthenticationHelper

描述'創建新會話'做

before(:each) do 
    setup_auth 
end 

let(:user) {FactoryGirl.create(:user, username: 'john', email: '[email protected]', password: 'pwd1234')} 

it 'should return 200 with valid username and password' do 
    post :create, user: {login: 'john', password: 'pwd1234'} 

    expect(response).to have_http_status 200 
    expect(controller.current_user.id).to eq(user.id) 
end 

末 結束

我SessionsController只是返回HTTP 401或HTTP 200 當我跑我的天賦,我得到這個錯誤:

NoMethodError: 未定義的方法authenticate?' for nil:NilClass # /usr/local/bundle/gems/devise-3.5.6/app/controllers/devise_controller.rb:103:in require_no_authentication」 #./spec /controllers/users/sessions_controller_spec.rb:16:in block (3 levels) in <top (required)>' # ./spec/rails_helper.rb:45:in' #/usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/generic/base.rb:16:in中的塊(3個級別) cleaning' # /usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/base.rb:98:in清理' #/ usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/configuration.rb:86:在block (2 levels) in cleaning' # /usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/configuration.rb:87:in調用' #/usr/local/bundle/gems/database_cleaner-1.6.0/lib/database_cleaner/configuration.rb :87:cleaning' # ./spec/rails_helper.rb:44:in block(2 levels)in'

我在做什麼錯?

回答

0

你應該在籤一個幫手,例如

module AuthenticationHelpers 
    module Controller 
     def sign_in(user) 
      controller.stub(:current_user).and_return(user) 
      controller.stub(:user_id).and_return(user.id) 
     end 
    end 

    module Feature 
     def sign_in(user, options={}) 
      visit "https://stackoverflow.com/users/sign_in" 
      fill_in "Email", with: user.email 
      fill_in "Password", with: options[:password] 
      click_button "Log in" 
     end 
    end 
end 

任何問題,請不要猶豫,評論

+0

沒有辦法測試只是我的會話控制器?我正在通過Ajax執行登錄,這就是爲什麼我只想測試我的控制器是否正確返回200和401。 – jonatasdaniel

+0

正如我在規格文件中看到的那樣,他們需要_require'authentication_helper'_,所以我認爲我應該有文件 – Andres23Ramirez