gpt4 book ai didi

ruby-on-rails - Hartl 的 Rails 教程第 9 章练习 6

转载 作者:行者123 更新时间:2023-12-04 10:55:05 31 4
gpt4 key购买 nike

Updating, showing, and deleting users, exercises

有没有办法为用户 Controller 操作(例如“创建”和“新建”)创建 Rspec 测试?

我也不太清楚“创建”和“新建”这两个 Action 本身之间的区别;有人可以这么好心详细说明吗?

创建测试后,我将如何实现redirect_to root_path?我想我应该在 before_filter signed_in 部分中包含“新建”和“创建”操作,但这不会自动重定向到根目录。

我试图通过如下修改 users_controller.rb 文件来让测试通过:

  def create
if signed_in?
redirect_to root_path
else
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
end

最佳答案

我为此做了一个之前的过滤器,似乎效果很好,
为了测试,我这样做了:

在 authentication_pages_spec.rb

describe "signin" do
describe "authorization" do
describe "for signed in users" do
let(:user) { FactoryGirl.create(:user) }
let(:new_user) { FactoryGirl.attributes_for(:user) }
before { sign_in user }

describe "using a 'new' action" do
before { get new_user_path }
specify { response.should redirect_to(root_path) }
end

describe "using a 'create' action" do
before { post users_path new_user }
specify { response.should redirect_to(root_path) }
end
end
end
end

就像@WillJones 说的,有些人可能需要添加 no_capybara: true到前块

在我的用户 Controller 上:
before_filter :signed_in_user_filter, only: [:new, :create]

def signed_in_user_filter
redirect_to root_path, notice: "Already logged in" if signed_in?
end

对于 new 和 create Action 之间的区别,它与 REST 有关。建筑风格,但基本上, new是来自用户 Controller 的响应 GET 的操作request 并且负责返回它响应的 View (在这种情况下,是一个新的用户表单)。 create另一方面,是响应 POST 的操作。请求,它不会呈现任何内容(它可以使用 javascript 进行响应,但这是一个高级主题)并且它负责创建新用户,就像操作的名称所暗示的那样。

关于ruby-on-rails - Hartl 的 Rails 教程第 9 章练习 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118680/

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