Rails6 で Railsをやり直す ~その3~
本に書いてある通りコード書いたのに動かないなぁ、ってことよくありますよね。(だいたい自分がミスってるんですが…)
でもホントにたまに、本が間違っていることもあります。ということで、正誤表にも目を通しながら学習するのがオススメです。
ちなみに「Rails 6 実践ガイド」はwebサイトに正誤表があります。
https://www.oiax.jp/books/jissen_rails6_errata
今日は、ちょうど正誤表に載っていない誤記を見つけたので、メールで報告したところ、10分くらいで返事が返ってきて修正してもらえました!早い!
3日目
職員のログイン・ログアウトが出来ました。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)
いつもありがとうございます! いただいたサポートは開発費(サーバー運用費)などに使わせていただきます!