Я использую nifty:authentication
Райана Бейтса и начинаю тестирование с Rspec.Бороться с этим неделями, и до сих пор не понимаю, что происходит.
Мой контроллер просто вызывает
before_filter :login_required, :except => [:login]
Что определено в lib / controller_authentication
def self.included(controller)
controller.send :helper_method, :current_account, :logged_in?, :redirect_to_target_or_default
end
def current_account
@current_account ||= Account.find(session[:account_id]) if session[:account_id]
end
def logged_in?
current_account
end
def login_required
unless logged_in?
store_target_location
redirect_to login_url, :alert => "You must first answer me these riddles three log in or sign up before accessing this page."
end
end
def redirect_to_target_or_default(default, *args)
redirect_to(session[:return_to] || default, *args)
session[:return_to] = nil
end
private
def store_target_location
session[:return_to] = request.url
end
end
Приложение работает так, как задумано, но каждый раз тестирование не выполняется.Независимо от того, что я пытаюсь, я получаю redirect_to login_url, :alert => "You must first ...log in"
страницу.
Вещи, которые я пробовал:
controller.stub!( :login_required )
ControllerAuthentication.stub!(:current_account).and_return(Account.where(:username => 'ej0c').first)
#ControllerAuthentication.stub!(:logged_in?).and_return(Account.where(:username => 'ej0c').first)
ControllerAuthentication.stub!(:login_required).and_return(true)
MyDigisController.stub!( :login_required ).and_return(true)
Что, я думаю, означает, что я упускаю всю теорию вещей.Как мне сделать так, чтобы мой логин работал?
Я пытался, как рекомендует Punit ниже: [pre]
require 'spec_helper'
describe "View event details" do
it "Should show a table of events" do
@account = Account.where(:username => 'ej0c').first
puts @account.inspect
controller.stub!(:current_account).and_return(@account)
controller.stub!(:logged_in?).and_return(true)
session[:account_id] = @account.id
visit '/my_digis/66/custom_events'
page.should have_content('Events')
end
end
@account.inspect отображался хорошо, но я также получил
An expectation of :current_account was set on nil. Called from C:/Users/Ed/webapps/whendidji3/spec/con
.rb:8:in `block (2 levels) in <top (required)>'. Use allow_message_expectations_on_nil to disable warn
An expectation of :logged_in? was set on nil. Called from C:/Users/Ed/webapps/whendidji3/spec/controll
:in `block (2 levels) in <top (required)>'. Use allow_message_expectations_on_nil to disable warnings.
Спасибо за любые подробные объяснения, так как я искал хай-лоу, чтобы понять, что происходит.