心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。9.1.2章。

   


9.1.2編集の失敗、です。

テストを書きます

リスト9.9 ユーザーupdateアクションのテスト。
spec/requests/user_pages_spec.rb

require 'spec_helper'

describe "User pages" do
略
  describe "edit" do
    let(:user) { FactoryGirl.create(:user) }
    before do
      visit signin_path
      fill_in "Email",    with: user.email
      fill_in "Password", with: user.password
      click_button "Sign in"
      visit edit_user_path(user)
      visit edit_user_path(user)
    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_title(new_name) }
      it { should have_selector('div.alert.alert-success') }
      it { should have_link('Sign out', href: signout_path) }
      specify { expect(user.reload.name).to  eq new_name }
      specify { expect(user.reload.email).to eq new_email }
    end
  end
end

sign_inヘルパーをテストでも使っているところが気になります。いいいのかなーテストで本番コードを使用すべきでないと思います。RailsTutorialの良くないところです。

リスト9.6で使われたsign_inメソッドをbeforeブロック内に追加しています。これにより、”Sign Out” リンクのテストをパスさせることができます。また、サインインしていないユーザがeditアクションを実行できないことも確認しています

なのでsign_inヘルパーつかわない形に書き換えています。

reloadは属性変更のテストで、user.reloadとすると、user変数に再度読み込みが行われ、ユーザーの新しい名前とメールアドレスが新しい値と一致するかどうかが確認されます。

contorollerを実装

リスト9.10 ユーザーのupdateアクション。
app/controllers/users_controller.rb

class UsersController < ApplicationController
略
  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
      flash[:success] = "Profile updated"
      redirect_to @user
    else
      render 'edit'
    end
  end
略
end

テストはパスします。いったんコミットして次は
9.2認可、
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

初めてのRuby8章 8.2変数と定数

8.2 変数と定数 8.2.1 インスタンス変数 @で始まるのがインスタンス変数 …

no image
RailsTutorial4.0を高速で復習する。11.2.4章。

11.2.4[フォローする] ボタン (標準的な方法)、です。 仕様 それぞれの …

no image
RailsTutorial4.0を高速で復習する。9.2章。

9.2認可、です。 自分以外の人が自分のProfileを変更できないようにします …

no image
iPhone充電3回分?大容量バッテリーで残念がなくなりました

iPhoneは便利なので、一日中使いっ放しの日がよくあります。iPhoneがあれ …

Mac mini買いました。

Appleの新製品発表が近づいているというのに、Mac mini買ってしまいまし …

no image
テンプレとヘルパーの順番

http://yourdomain/actionxを呼んだときのactionx用 …

no image
Ruby on Railsのインストール

Rubyのアップデートが終わったので、いよいよRailsをインストールします。 …

BD再生のオープンソース

メディアはシリコンすら持ちたくない主義なのですが、どうしてもBluelay Di …

twitterと連携した写真のライブラリー

iPhoneを使うようになってから気軽に写真撮影し、そのままtwitter投稿す …

WordPressの管理画面真っ白問題に対処しました

WordPressの自作テンプレを作ったはいいものの、管理画面が真っ白になって投 …