gpt4 book ai didi

ruby-on-rails - 如何在 rspec 功能测试中访问(设计)current_user?

转载 作者:数据小太阳 更新时间:2023-10-29 06:30:13 27 4
gpt4 key购买 nike

在设计文档中,他们提供了有关在测试 Controller 时如何访问 current_user 的提示:

https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29

但是,在进行功能测试时呢?我正在尝试测试我的一个 Controller 的创建方法,并且在该 Controller 中使用了 current_user 变量。

问题是 devise 中建议的宏使用了 @request 变量,并且对于功能规范来说它是 nil。什么是解决方法?

编辑:

这是我目前的规范:

feature 'As a user I manage the orders of the system' do
scenario 'User is logged in ad an admin' do
user = create(:user)
order = create(:order, user: user)
visit orders_path
#Expectations
end
end

问题是在我的 OrdersController 中有一个 current_user.orders 调用,由于 current_user 没有定义,它会重定向我到 /users/sign_in

我在 /spec/features/manage_orders.rb 下定义了它

最佳答案

来自 https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29

如果我没理解错的话,也许你需要使用

subject.current_user.email
#or
controller.current_user.email

例如:

describe OrdersController, :type => :controller do
login_user

describe "POST 'create'" do
it "with valid parametres" do
post 'create', title: 'example order', email: subject.current_user.email
end
end
end

controller_macros.rb :

module ControllerMacros
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.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

不要忘记将其包含到您的 spec_helper.rb 中:

config.include Devise::TestHelpers, type: :controller
config.extend ControllerMacros, type: :controller

关于ruby-on-rails - 如何在 rspec 功能测试中访问(设计)current_user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793597/

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