0

ここの他の質問を通じて多くの提案を試みてきましたが、これを理解できません。Hartl チュートリアル Ch. 9.1.1 http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users

ところで、私はこのテストを実行しています: $ bundle exec rspec spec/requests/user_pages_spec.rb -e "edit page"

また、更新プロファイル ページの UI にもアクセスしていません。図 9.2 は見ていない URI localhost:3000/users/1/edit には、次のエラーがあります。

4: <div class="row">
5:   <div class="span6 offset3">
6:     <%= form_for(@user) do |f| %>

モデル名の未定義メソッドは form_for 由来ではないでしょうか?

RSpec 側では、3 つの失敗があります。最初にRspecエラーについて言及します

Failures:

  1) User pages signup edit page 
     Failure/Error: before { visit edit_user_path(user) }
     ActionView::Template::Error:
       undefined method `model_name' for NilClass:Class
     # ./app/views/users/edit.html.erb:6:in `_app_views_users_edit_html_erb__1823978725744522424_2169171460'
     # ./spec/requests/user_pages_spec.rb:56:in `block (4 levels) in <top (required)>'

  2) User pages signup edit page 
     Failure/Error: before { visit edit_user_path(user) }
     ActionView::Template::Error:
       undefined method `model_name' for NilClass:Class
     # ./app/views/users/edit.html.erb:6:in `_app_views_users_edit_html_erb__1823978725744522424_2169171460'
     # ./spec/requests/user_pages_spec.rb:56:in `block (4 levels) in <top (required)>'

  3) User pages signup edit page 
     Failure/Error: before { visit edit_user_path(user) }
     ActionView::Template::Error:
       undefined method `model_name' for NilClass:Class
     # ./app/views/users/edit.html.erb:6:in `_app_views_users_edit_html_erb__1823978725744522424_2169171460'
     # ./spec/requests/user_pages_spec.rb:56:in `block (4 levels) in <top (required)>'

Finished in 0.435 seconds
3 examples, 3 failures

Failed examples:

rspec ./spec/requests/user_pages_spec.rb:59 # User pages signup edit page 
rspec ./spec/requests/user_pages_spec.rb:60 # User pages signup edit page 
rspec ./spec/requests/user_pages_spec.rb:61 # User pages signup edit page 

ここに私の Edit.html.erb ページがあります:

<% provide(:title, "Edit user") %>
<h1>Update your profile</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_for(@user) do |f| %>
    <%= render 'shared/error_messages' %>

      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :email %>
      <%= f.text_field :email %>

      <%= f.label :password %>
      <%= f.password_field :password %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation %>

      <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
    <% end %>

    <% gravatar_for @user %>
    <a href="http://gravatar.com/emails">change</a>
  </div>
</div>

そして、これが私のユーザースペックページです

require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_selector('h1',   text: user.name) }
    it { should have_selector('title', text: user.name) }
  end

  describe "signup page" do
    before { visit signup_path }

    it { should have_selector('h1',   text: 'Sign up') }
    it { should have_selector('title', text: full_title('Sign up')) }
  end

describe "signup" do

    before { visit signup_path }

    describe "with invalid information" do
      it "should not create a user" do
        expect { click_button submit }.not_to change(User, :count)
      end


    describe "with valid information" do
      before do
        fill_in "Name",         with: "Example User"
        fill_in "Email",        with: "user@example.com"
        fill_in "Password",     with: "foobar"
        fill_in "Confirmation", with: "foobar"
      end

      it "should create a user" do
        expect { click_button submit }.to change(User, :count).by(1)
      end

     describe "after saving the user" do
       before { click_button submit }
       #let(:user) { User.find_by_email('user@example.com') }
       #it { should have_selector('title',   text: user.name) }    
      #it { should have_selector('div.alert.alert-success', text: 'Welcome') }
      it { should have_link('Sign out') }   
     end
      end
   end

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

        describe "page" do
          it { should have_selector('h1',   text: "Update your profile") }
          it { should have_selector('title', text: "Edit user") }
          it { should have_link('change', href: 'http://gravatar.com/emails') }
        end

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

          it { should have_content('error') }
  end
  end
end
end

ここに私の認証ページの仕様があります:

require 'spec_helper'

describe "Authentication" do

  subject { page }

   describe "signin page" do
    before { visit signin_path }

    it { should have_selector('h1',   text: 'Sign in') }
    it { should have_selector('title', text: full_title('Sign in')) }
    end

    describe "signin" do
    before { visit signin_path }

    describe "with invalid information" do
      before { click_button "Sign in" }

    it { should have_selector('title',   text: 'Sign in') }
    it { should have_selector('div.alert.alert-error', text: 'Invalid') }

     describe "after visiting another page" do
      before { click_link "Home" }

    it { should_not have_selector('div.alert.alert-error') }
  end
end


  describe "with valid information" do
    let(:user) { FactoryGirl.create(:user) }
      before do
          fill_in "Email", with: user.email
          fill_in "Password", with: user.password
          click_button "Sign in"
     end

    it { should have_selector('title',   text: user.name) }
    it { should have_link('Profile', href: user_path(user)) }
        #it { should have_link('Settings', href: edit_user_path(user)) }
    it { should have_link('Sign out', href: signout_path) }
    it { should_not have_link('Sign in', href: signin_path)}


  describe "followed by signout" do
    before { click_link "Sign out" }
    it { should have_link('Sign in') }  
end
end 
end
end

これが私のroutes.rbファイルです:

SampleApp::Application.routes.draw do
  resources :users
  resources :sessions, only: [:new, :create, :destroy]

  root to: 'static_pages#home'

  match '/signup', to: 'users#new'
    match '/signin', to: 'sessions#new'
      match '/signout', to: 'sessions#destroy', via: :delete


  match '/help', to: 'static_pages#help'
  match '/about', to: 'static_pages#about'
  match '/contact', to: 'static_pages#contact'

ここに私のUsers Controllerがありますが、これは無傷のようです

class UsersController < ApplicationController

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

  def new
    @user = User.new
  end

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

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

Capybara を 1 から 2.0.0 に更新し、他にもいろいろ試しました。私は Rails にかなり慣れていないので、髪を伸ばしています!

4

3 に答える 3

1

編集テスト ページはリスト 9.1 から合格するはずですが、エラー メッセージ test # it { should have_content('error') } # 9.1.2 の演習を完了するまで合格しないことに注意してください。

于 2014-06-08T14:30:49.023 に答える
0

メソッドステートメントのバランスが取れていません:

class UsersController < ApplicationController

  # correctly terminated
  def show
  end

  # correctly terminated
  def new
  end

  # this method is not terminated correctly as there should be another "end" statement
   def create
    if @user.save
    else
      end
   # Put an extra "end" statement here by un-commenting the line below 
   # end

  # the missing end statement above means this method is defined inside #create
  def edit
  end

# one of the following two "end" statements is superfluous delete it 
end
end
于 2013-05-11T21:36:26.850 に答える
0

適切にインデントされたユーザーコントローラーを確認してください。

class UsersController < ApplicationController

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

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

うまくいけば、それは今明らかです。

于 2013-05-11T21:36:38.430 に答える