1

使用 RSpec 运行某些测试时,我收到此错误(多次):

1) User Pages edit with valid information 
     Failure/Error: visit edit_user_path(user)
     ActionView::Template::Error:
       wrong number of arguments (0 for 1)
     # ./app/views/users/edit.html.haml:15:in `block in _app_views_users_edit_html_haml__2466546393595631499_70225077026800'
     # ./app/views/users/edit.html.haml:6:in `_app_views_users_edit_html_haml__2466546393595631499_70225077026800'
     # ./spec/requests/user_pages_spec.rb:54:in `block (3 levels) in <top (required)>'

我不熟悉阅读 Rails 错误消息;这是否告诉我使用错误数量的参数调用的方法在 edit.html.haml 或 user_pages_spec.rb 中?是说使用 0 个参数调用 edit_user_path 吗?

编辑以添加我的代码:

编辑.html.haml:

- provide(:title, "Edit user")
%h1 Update your profile

.row
    .span6.offset3
        = form_for(@user) do |f|

            = f.label :name
            = f.text_field :name

            = f.label :email
            = f.text_field :email

            = f.label :password
            = f.password_field

            = f.label :password_confirmation, "Confirm Password"
            = f.password_field :password_confirmation

            = f.submit "Save changes", class: "btn btn-large btn-primary"

user_pages_spec.rb 的相关部分:

describe "edit" do
        let(:user) { FactoryGirl.create(:user) }
        before do
            sign_in user
            visit edit_user_path(user)
        end

        describe "page" do
            it { should have_selector('h1',    text: "Update your profile") }
            it { should have_selector('title', text: "Edit user") }
        end

        describe "with invalid information" do
            before { click_button "Save changes" }

            it { should have_content('error') }
        end

        describe "with valid information" do
            let(:new_name) { "New Name" }
            let(:new_email) { "new@example.com" }
            before do
                fill_in "Name",             with: new_name
                fill_in "Email",            with: new_email
                fill_in "Password",         with: user.password
                fill_in "Confirm Password", with: user.password
                click_button "Save changes"
            end

            it { should have_selector('title', text: new_name) }
            it { should have_success_message('') }
            it { should have_link('Sign out', href: signout_path) }
            specify { user.reload.name.should == new_name }
            specify { user.reload.email.should == new_email }
        end 
    end
4

2 回答 2

9

基本上,错误数量的参数意味着对于该方法,它认为您应该传递一定数量的变量,并且它接收的数量错误。

在这种情况下,它期望传入 1 个变量,但它没有接收到任何变量。

从它的外观来看,您应该查看您的 edit.html.haml 文件的第 15 行,我猜这里是:

= f.label :password
= f.password_field

看起来您缺少 :password - 传递实际变量。

所以改成:

= f.password_field :password

你应该很好。

于 2012-10-16T13:18:43.507 回答
2

所以堆栈跟踪的顶部是最后一个调用的方法,它从那里沿着链向下推进。这表明错误在编辑文件中。如果您粘贴了整个编辑文件,看起来 15 缺少密码字段的参数。应该:

= f.password_field :password
于 2012-10-16T13:18:21.417 回答