所以我想測試使用設計的控制器。Rails和設計 - 測試控制器登錄和退出時
require 'rails_helper'
describe ArticlesController do
before(:all) { @article = FactoryGirl.create(:article) }
sign_in_admin
describe 'GET new' do
let(:call_request) { get :new }
before { call_request }
context 'admin signed in' do
it { is_expected.to respond_with :ok }
end
context 'admin signed out' do
it { is_expected.to respond_with 302 }
end
end
end
我跟着this guide from devise wiki。因此,我創建ControllerMacros模塊,你可以在這裏看到:
module ControllerMacros
def sign_in_admin
before(:each) do
@request.env['devise.mapping'] = Devise.mappings[:admin]
@admin = FactoryGirl.create(:admin)
sign_in @admin
end
end
end
而且包括它和其他需要的東西rails_helper:
require_relative 'support/controller_macros.rb'
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :controller
config.extend ControllerMacros, type: :controller
(...)
這裏是admin廠:
FactoryGirl.define do
factory :admin do
email '[email protected]'
password 'password'
end
end
但現在我不知道如何註銷管理員?由於sign_in_admin在每次測試之前都在執行,但我需要爲某些測試簽署管理員。使用登錄/註銷管理員測試此控制器的最佳方式是什麼?
順便說一句,我還挺新的測試
紅寶石說:LIB/rspec的/核心/ example_group.rb:675:在'method_missing的 ':未定義的方法'login_user' 的RSpec的:: ExampleGroups :: ArticlesController :: GETNEW :: AdminSignedIn:Class(NoMethodError)。我需要將它包含在某個地方嗎? – dominikduda
對不起,它應該是sign_in,而不是登錄。我編輯了我的答案。您需要rspec並在您的規範助手中包含測試助手。 RSpec.configure do | config | config.include Devise :: TestHelpers,輸入::controller end你可以閱讀設計文檔https://github.com/plataformatec/devise中的測試助手,它們位於底部。 – margo
完美無瑕,謝謝! – dominikduda