402


Rails4(4.2.0.rc1)でコントローラーのPOSTアクションのテストを書こうとしたのですが、ActionController::ParameterMissing
のエラーでテストできません。

### コントローラー

[code]

    class UsersController < ApplicationController
    
      # ... 省略 ...
    
      def create
        @user = User.new(user_params)
        if @user.save
          flash[:success] = "Welcome to Sample App!"
          log_in @user
          redirect_to @user
        else
          render 'new'
        end
      end
    
      # ... 省略 ...
    
[/code]

### テスト

[code]

    require 'test_helper'
    
    class UsersControllerTest < ActionController::TestCase
    
      test "should post create" do
        post :create,
             name: "abc",
             email: "test@example.com",
             password: "passwd",
             password_confirmation: 'passwd'
        assert_response :success
      end
    end
    
[/code]

### エラー

[code]

     test_should_post_create#UsersControllerTest (0.64s)
    ActionController::ParameterMissing:         ActionController::ParameterMissing: param is missing or the value is empty: user
                app/controllers/users_controller.rb:37:in `user_params'
                app/controllers/users_controller.rb:11:in `create'
                test/controllers/users_controller_test.rb:10:in `block in <class:UsersControllerTest>'
            app/controllers/users_controller.rb:37:in `user_params'
            app/controllers/users_controller.rb:11:in `create'
            test/controllers/users_controller_test.rb:10:in `block in <class:UsersControllerTest>'
    
[/code]

Webブラウザ上のフォームでは実行できていて、POSTパラメータをのぞくと、テストで指定しているのと同じ`name`, `email`,
`password`, `password_confirmation` が入っていました。  
どうすればエラーなく実行できますか？


CC BY-SA 3.0
2014-12-06T13:23:16.323
399
2014-12-20T11:55:25.833
2014-12-20T11:55:25.833
33
645
question
ruby ruby-on-rails テスト
Rails4でコントローラーのPOSTアクションのテストをしたいが ActionController::ParameterMissing のエラーでテストできない


自己解決してしまいました。

[code]

    post :create,
         user: {
           name: "abc",
           email: "test@example.com",
           password: "passwd",
           password_confirmation: 'passwd'
         }
    
[/code]

の形のハッシュをパラメータにしないといけませんでした。


CC BY-SA 3.0
2014-12-06T14:42:12.723
402
2014-12-06T14:42:12.723
645
399
answer