gpt4 book ai didi

ruby-on-rails - 使用 Rspec、NiftyAuthentication 进行测试

转载 作者:行者123 更新时间:2023-12-04 06:17:37 24 4
gpt4 key购买 nike

我正在使用 Ryan Bates 的 nifty:authentication ,并开始使用 Rspec 进行测试。与这个斗争了几个星期,仍然不明白发生了什么。

我的 Controller 只是调用

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 的建议进行了尝试:
[预]
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.

感谢您提供任何详细的解释,因为我已经搜索了高低以了解发生了什么。

最佳答案

您使用的是 vanilla 规范而不是 Controller 规范,这意味着未设置变量“ Controller ”。

要使用 Controller 规范,您需要将 Controller 类名称而不是字符串传递给您的 describe 块。

describe MyController do

http://rspec.info/rails/writing/controllers.html

一旦你这样做了,你应该能够使用你原来的想法来 stub login_required

关于ruby-on-rails - 使用 Rspec、NiftyAuthentication 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com