2016-07-07 34 views
0

当前正在做Hartl的(更新的)教程,我在第7章的末尾[7.5.3是特定的,生产部署]被卡住了。ActionController :: ParamaterMissing while running test。从Hartl教程的第7章

我运行一个测试,得到以下错误:

1) Error: 
UsersSignupTest#test_invalid_signup_information: 
ActionController::ParameterMissing: param is missing or the value is empty: user 
app/controllers/users_controller.rb:24:in `user_params' 
app/controllers/users_controller.rb:12:in `create' 
test/integration/users_signup_test.rb:8:in `block (2 levels) in <class:UsersSignupTest>' 
test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>' 


2) Error: 
UsersSignupTest#test_valid_signup_information: 
ActionController::ParameterMissing: param is missing or the value is empty: user 
app/controllers/users_controller.rb:24:in `user_params' 
app/controllers/users_controller.rb:12:in `create' 
test/integration/users_signup_test.rb:19:in `block (2 levels) in <class:UsersSignupTest>' 
test/integration/users_signup_test.rb:18:in `block in <class:UsersSignupTest>' 

users_controller.rb

class UsersController < ApplicationController 

    def show 
    @user = User.find(params[:id]) 
    end 

    def new 
    @user = User.new 
    end 

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

    private 

    def user_params 
     params.require(:user).permit(:name, :email, :password, 
            :password_confirmation) 
    end 
end 

users_signup_test.rb

require 'test_helper' 

class UsersSignupTest < ActionDispatch::IntegrationTest 

    test "invalid signup information" do 
    get signup_path 
    assert_no_difference 'User.count' do 
     post users_path, params: { user: { name: "", 
             email: "[email protected]", 
             password:    "foo", 
             password_confirmation: "bar" } } 
             end 
             end                


    test "valid signup information" do 
    get signup_path 
    assert_difference 'User.count', 1 do 
     post users_path, params: { user: { name: "Example User", 
             email: "[email protected]", 
             password:    "password", 
             password_confirmation: "password" } } 
    end 
    follow_redirect! 
    assert_template 'users/show' 
    end 
end 
+0

你使用什么版本的Rails和RSpec? – spickermann

回答

0

post(以及其它的HTTP请求方法)的签名具有导轨4和导轨5之间变化。

因此发送一个user参数在Rails 4 us中E本:

post user_path, { user: { name: 'foo' } } 

而在导轨5使用本:

post user_path, params: { user: { name: 'foo' } } 

哈特尔的Rails的教程进行了更新到Rails 5日前。但我猜你还在运行Rails 4.这意味着:删除参数的嵌套或更新你的应用程序到Rails 5.

+0

这说明了它。我在这里挠头。我使用的是Rails 4.2.6,我注意到Hartl的当前教程有一些差异(例如Rails 5使用“rails”而不是“rake”),谢谢。 – CarlosG90

0

你有PARAMS ,inste用户的广告。

更改此:

params: { name: "", 
         email: "[email protected]", 
         password: "foo", 
         password_confirmation: "bar" } } 
     end 
    end 

这样:

user: { name: "", 
          email: "[email protected]", 
          password: "foo", 
          password_confirmation: "bar" } } 
      end 
     end 
+0

固定!谢谢Marv。 – CarlosG90

相关问题