gpt4 book ai didi

ruby-on-rails-3 - Rails 3 - 通过 rspec 正确测试 PUT 方法

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

我有模型 TeacherLeader,它为其他表保留外键。我可以更新此表并尝试为我的 Controller 编写测试(通过 rspec)。

我的模型:

#  id         :integer         not null, primary key
# user_id :integer
# teacher_id :integer
#

class TeacherLeader < ActiveRecord::Base
belongs_to :user
belongs_to :teacher

validates :teacher_id,
:uniqueness => { :message => "already a class-head" }
end

我的 Controller

class TeacherLeadersController < ApplicationController
def edit
@teacher_leader = TeacherLeader.find( params[:id] )
...
end

def update
@teacher_leader = TeacherLeader.find( params[:id] )
...

if ( @teacher_leader.update_attributes( params[:teacher_leader] ) )
redirect_to teachers_path
...
else
redirect_to edit_teacher_leader_path
...
end
end
end
end

因此,我在为 PUT 编写测试时遇到了问题。这是我的 PUT 方法代码示例:

describe TeacherLeadersController do
render_views

before(:each) do
@teacher = Factory( :teacher )
@teacher.user.user_role = "teacher"
@teacher.save!

@user = Factory( :user, :user_login => Factory.next(:user_login) )
@user.user_role = "class_head"
@user.save!

@sh = Factory( :user, :user_login => Factory.next(:user_login) )
@sh.user_role = "school_head"
@sh.save!
end

describe "PUT 'update" do
before(:each) do
@teacher_leader = @user.create_teacher_leader( @attr_teacher_leader )
end

describe "for signed-in school-heads" do
before(:each) do
test_sign_in( @sh )
end

it "should update teacher leader with correct params" do
put :update, :id => @teacher_leader, :teacher_id => @teacher.id
@teacher_leader.reload
@teacher_leader.teacher_id.should == @teacher.id
end
end
end
end

当我尝试运行我的规范时,我得到了:

1) TeacherLeadersController PUT 'update for signed-in school-heads should update teacher leader with correct params
Failure/Error: put :update, :id => @teacher_leader, :teacher_id => @teacher.id
NoMethodError:
undefined method `[]' for nil:NilClass
# ./app/controllers/teacher_leaders_controller.rb:57:in `update'
# ./spec/controllers/teacher_leaders_controller_spec.rb:150:in `block (4 levels) in <top (required)>'

但我的应用程序有效!我在测试中做错了什么?

最佳答案

您的 Controller 需要一个 params[:teacher_leader] 哈希,但您的测试没有提供它。试试这个:

it "should update teacher leader with correct params" do
put :update, :id => @teacher_leader, :teacher_leader => { :teacher_id => @teacher.id }
# ...

关于ruby-on-rails-3 - Rails 3 - 通过 rspec 正确测试 PUT 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10054215/

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