Rails在控制器创建方法中测试重定向

时间:2014-04-26 20:33:02

标签: ruby-on-rails unit-testing redirect testing ruby-on-rails-4

我是Rails中的新手,试图测试batiment的创建以及重定向到此show的{​​{1}}页面。

batiments_controller_test.rb

batiment

batiments_controller.rb

test "should create batiment" do
 post :create, batiment: {nom: "New batiment"}
 assert_response :success
 assert_redirected_to assigns(:batiment)
end

路由

def create
  @batiment = Batiment.new(batiment_params)
 if @batiment.save
  flash[:notice] = "Bâtiment créé!"
  redirect_to @batiment
 else
  render('new')
 end
end

运行测试时的终端:

                   POST   /batiments(.:format)                              batiments#create
   new_batiment GET    /batiments/new(.:format)                          batiments#new
  edit_batiment GET    /batiments/:id/edit(.:format)                     batiments#edit
       batiment GET    /batiments/:id(.:format)                          batiments#show

1 个答案:

答案 0 :(得分:1)

当然无法创建batiment,因此该操作会呈现视图'new'。这解释了为什么assert_response :success通过了(请求返回了http代码200),以及为什么assert_redirected_to assigns(:batiment)失败了(batiment没有保存,所以它没有id)。

检查保存失败的原因(可能是验证失败?检查@batiment.errors),然后重写测试:

test 'should create batiment' do
 assert_difference('Batiment.count') do
   post :create, batiment: {nom: 'New batiment'}
 end
 assert_redirected_to assigns(:batiment)
end
相关问题