見出し画像

Rails6 で Railsをやり直す ~その3~

本に書いてある通りコード書いたのに動かないなぁ、ってことよくありますよね。(だいたい自分がミスってるんですが…)
でもホントにたまに、本が間違っていることもあります。ということで、正誤表にも目を通しながら学習するのがオススメです。

ちなみに「Rails 6 実践ガイド」はwebサイトに正誤表があります。
https://www.oiax.jp/books/jissen_rails6_errata

今日は、ちょうど正誤表に載っていない誤記を見つけたので、メールで報告したところ、10分くらいで返事が返ってきて修正してもらえました!早い!

3日目

画像1

職員のログイン・ログアウトが出来ました。Railsをやっている感が出てきました。deviseなどログイン系のgemを使わないで作るので実装の中身を意識しながら進められていいですね。

では、職員の認証機能に続き、8-4 演習問題 で管理者の認証も作成しました。ここでは、問題2、問題3のファクトリーとテストについて少し書きます。

問題2
Administratorのカラムは少ないので、ファクトリーは以下のようになります。
3行目のsequenceメソッドは、連番で値を設定するときに使用するもので、ちょうどここでは、{n}の部分が連番になります。
admin0@example.com, admin1@example.com...のような感じです。

FactoryBot.define do
 factory :administrator do
   sequence(:email) { |n| "admin#{n}@example.com" }
   password { "pw" }
   suspended { false }
 end
end


問題3
お次は、specファイルを作ってテストをします。
パスワードと停止フラグについてのテストを書きました。

require "rails_helper"

describe Admin::Authenticator do
 describe "#authenticate" do
   example "正しいパスワードならtrueを返す" do
     a = build(:administrator)
     expect(Admin::Authenticator.new(a).authenticate("pw")).to be_truthy
   end

   example "誤ったパスワードならfalseを返す" do
     a = build(:administrator)
     expect(Admin::Authenticator.new(a).authenticate("xy")).to be_falsey
   end

   example "パスワード未設定ならfalseを返す" do
     a = build(:administrator, password: nil)
     expect(Admin::Authenticator.new(a).authenticate(nil)).to be_falsey
   end

   example "停止フラグが立っていてもtrueを返す" do
     a = build(:administrator, suspended: true)
     expect(Admin::Authenticator.new(a).authenticate("pw")).to be_truthy
   end
 end
end

では、以下のコマンドでテストを実行しましょう!

$ rspec spec/services/admin/authenticator_spec.rb 
....

Finished in 2.04 seconds (files took 14.37 seconds to load)
4 examples, 0 failures


では、おやすみなさい


進捗 38.9%  (p.190 / p.488)




いつもありがとうございます! いただいたサポートは開発費(サーバー運用費)などに使わせていただきます!