gpt4 book ai didi

ruby-on-rails - 在 Controller 外测试重定向

转载 作者:行者123 更新时间:2023-12-05 05:25:43 26 4
gpt4 key购买 nike

我有一个辅助模块,如果当前用户没有访问网页的权限,它会触发 redirect_to 的方法。

我在运行测试时遇到了 NoMethodError 错误,因为助手实际上没有 redirect_to 方法。我试过像这样删除 redirect_to:

it "redirects the user to the user's langing page if the user doesn't have permission" do
allow(helper).to receive(:current_or_guest_user) { test_user }
expect(helper).to receive(:redirect_to)
helper.require_permission :view_admins
end

但我收到一个很长的错误,提示助手未实现 redirect_to

有没有办法杜绝这种方法?

最佳答案

您可以在规范中创建一个匿名 Controller 并将您的模块包含在其中。当你得到它时,你可以像正常的 Controller 操作/方法一样测试它。因此,将类似的内容添加到您的规范中:

controller(YourController) do
include YourModule

def index
render text: 'body'
end
end

我不知道你的方法是否是 before_action ,但看起来是因为你正在测试用户是否具有所需的 view_admins 权限.

因此,当用户拥有所需的权限时,您的规范应该是这样的:

context 'when the user has the required permission' do
before do
# make sure the user has the required permission
end

it 'the user will see the rendered text' do
get :index
expect(response.body).to eq 'body'
end
end

当用户没有所需的权限时,他们将被重定向到您定义的路径。所以,像这样:

context 'when the user does NOT have the required permission' do
before do
# make sure the user does NOT have the required permission
end

it 'the user will be redirected to the specified path' do
get :index
expect(controller).to redirect_to your_specified_path
end
end

可以找到有关匿名 Controller 的更多信息here .

关于ruby-on-rails - 在 Controller 外测试重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30125054/

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