3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RailsTurorial-第6章メモ

Posted at

今回から、自分用にメモを残すことにした。きっと何かの機会に役立つ...はず。

##Rakeが実行できなくなる
マイグレーション後に、Rakeが実行できなくなることがあるらしい。
データベースが壊れた場合、リセットが必要。
その場合はrake db:test:prepareを実行することで、解決できる。

##6章でハマったところ。

リスト6.28の、パスワードの長さとauthenticateメソッドのテストのとき。

user_spec.rb
require 'spec_helper'

describe User do

  before do
    @user = User.new(name: "Example User", email: "user@example.com",
                     password: "foobar", password_confirmation: "foobar")
  end

  subject { @user }
  .
  .
  .
  it { should respond_to(:authenticate) }
  .
  .
  .
  describe "with a password that's too short" do
    before { @user.password = @user.password_confirmation = "a" * 5 }
    it { should be_invalid }
  end

  describe "return value of authenticate method" do
    before { @user.save }
    let(:found_user) { User.find_by(email: @user.email) }

    describe "with valid password" do
      it { should eq found_user.authenticate(@user.password) }
    end

    describe "with invalid password" do
      let(:user_for_invalid_password) { found_user.authenticate("invalid") }

      it { should_not eq user_for_invalid_password }
      specify { expect(user_for_invalid_password).to be_false }
    end
  end
end

specify { expect(user_for_invalid_password).to be_false }
この部分だけテストが通らなかった。

Failures:

  1. User return value of authenticate method with invalid password should be false
    Failure/Error: specify{ expect(user_for_invalid_password).to be_false }
    expected false to respond to `false?`
    # ./spec/models/user_spec.rb:91:in `block (4 levels) in <top (required)>`

という感じに。

見た感じ、打ち間違いもないし...とあーだこーだした結果。
RSpec3.0以降は最後のbe_falseの部分をbe_falsyと書かなければならないらしい。
書き換えたら、無事、解決。

##6章で紹介されたメソッド

method action
respond_to? シンボルを1つ引数として受け取り、オブジェクトが応答する場合はtrue、応答しない場合はfalseを返す。
valid? オブジェクトが一つ以上の検証に失敗した時にfalseを返す。全ての検証がパスした場合はtrueを返す。
authenticate 受け取ったパスワードがユーザーのものと一致した場合ユーザーが返され、一致しなかった場合はfalseを返す。
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?