gpt4 book ai didi

ruby-on-rails - rail3/rspec/devise : rspec controller test fails unless I add a dummy=subject. current_user.inspect

转载 作者:行者123 更新时间:2023-12-01 18:40:35 25 4
gpt4 key购买 nike

我正在尝试让 RSpec 适用于一个简单的脚手架应用程序,从 rspec 脚手架测试开始。

根据 devise wiki,我添加了各种设备配置条目、用户和管理员的工厂,并且我在规范 Controller 中做的第一件事是 login_admin。

最奇怪的是,我的所有规范都失败了,除非我在 it ... do 行之后添加以下语句:

dummy=subject.current_user.inspect

(使用该行,如下所示,规范通过。如果没有该行,所有测试都会失败,分配为零而不是预期值。我只是碰巧发现,当我放置一些 put 语句来查看是否current_user 已正确设置。)

所以它的作用是,虚拟语句以某种方式“强制”加载、刷新或识别 current_user。

谁能解释一下发生了什么事,以及我应该采取什么不同的做法,这样我就不需要虚拟声明了?

#specs/controllers/brokers_controller_spec.rb
describe BrokersController do
login_admin

def valid_attributes
{:name => "Bill", :email => "rspec_broker@example.com", :company => "Example Inc", :community_id => 1}
end

def valid_session
{}
end

describe "GET index" do
it "assigns all brokers as @brokers" do
dummy=subject.current_user.inspect # ALL SPECS FAIL WITHOUT THIS LINE!
broker = Broker.create! valid_attributes
get :index, {}, valid_session
assigns(:brokers).should eq([broker])
end
end
describe "GET show" do
it "assigns the requested broker as @broker" do
dummy=subject.current_user.inspect # ALL SPECS FAIL WITHOUT THIS LINE!
broker = Broker.create! valid_attributes
get :show, {:id => broker.to_param}, valid_session
assigns(:broker).should eq(broker)
end
end

根据 devise wiki,这是我登录 :user 或 :admin 的方式

#spec/support/controller_macros.rb
module ControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in Factory.create(:admin) # Using factory girl as an example
end
end

def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = Factory.create(:user)
user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module
sign_in user
end
end
end

最佳答案

多么艰难啊!谢谢罗宾,我已经在谷歌上搜索了几个小时,终于看到了你的帖子;现在我的 Controller 测试正在工作:)

为了补充您的答案,我弄清楚了如何将设计 session 放入 valid_session 哈希中,这使得 Controller 测试能够按照 Rails 生成的方式正确运行。

def valid_session
{"warden.user.user.key" => session["warden.user.user.key"]}
end

关于ruby-on-rails - rail3/rspec/devise : rspec controller test fails unless I add a dummy=subject. current_user.inspect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508707/

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