💎

認証付き minitest の使い方

に公開

お家の検証サーバ用の備忘録です。

プロジェクト

まずプロジェクトを初期化します。

mkdir minitest && cd $_
rails new .

データの準備

scaffold する

bin/rails g scaffold Post title:string content:text
bin/rails db:migrate

見えるように

config/routes.rb
root "posts#index"

この時点では全てのテストがパス

bin/rails test

認証機能の追加

認証モジュールの追加

bundle add devise

認証機能を利用できるように

bin/rails g devise:install
bin/rails g devise user
bin/rails db:migrate
app/controller/application_controller.rb
before_action :authenticate_user!

認証していないのでテストが失敗するようになります。

bin/rails test

テストを成功させる

ヘルパーを追加します。

test/test_helper.rb
# ...
class ActionDispatch::IntegrationTest
  include Devise::Test::IntegrationHelpers
end
# ...

認証用のユーザーを追加します。

test/fixtures/users.yml
one:
  email: user@example.com
  encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
two:
  email: user2@example.com
  encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>

認証を追加する。

test/controllers/posts_controller_test.rb
# ...
setup do
  @post = posts(:one)
  @user = users(:one)
  sign_in @user
end
# ...

これでテストが成功するようになります。

bin/rails test
GitHubで編集を提案

Discussion