0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Errorに遭遇した時の話

Posted at

はじめに:point_up:

今回は、GitHubpushした時出たerrorについてメモをまとめます。
今回遭遇したerrorは、LintError,TestErrorです。

最初と最後にエラーの確認でするコマンド↓
bash
$ bin/rails test

準備すること:clap:

user.ymlを無効化する

今は、何もデータの記載がないのでそのままでもいいんですが、
念の為読み込まない様にする。

bash
$ mv test/fixtures/users.yml test/fixtures/users.yml.backup
FactoryBotを設定する

Gemfielに追加をする
その後bundle installでインストールをする。

Gemfile
group :development, :test do
  gem 'factory_bot_rails'
end
Factoryファイルを作成
bash
$ mkdir test/factories
$ touch test/factories/user.rb
user.rb
FactoryBot.define do
  factory :user do
    sequence(:email) { |n| "user#{n}@example.com" } # ユニークなemailを生成
    password { "password" } # 必要に応じて変更
  end
end

LintError(コードスタイル)

エラー内容
Error: Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
Error: Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
Error: Layout/SpaceInsideArrayLiteralBrackets: Use space inside array brackets.
Error: Layout/SpaceInsideArrayLiteralBrackets: Use space inside array brackets.
Error: Layout/SpaceInsideArrayLiteralBrackets: Use space inside array brackets.
Error: Layout/SpaceInsideArrayLiteralBrackets: Use space inside array brackets.
Error: Layout/SpaceInsideArrayLiteralBrackets: Use space inside array brackets.
Error: Layout/SpaceInsideArrayLiteralBrackets: Use space inside array brackets.
Error: Layout/EmptyLinesAroundBlockBody: Extra empty line detected at block body end.
Error: Process completed with exit code 1.

今回は、RuboCopが以下のようなスタイル違反を報告:

  • シングルクオート(')ではなくダブルクオート(")を使用
  • 配列の括弧内にスペースを入れる
  • ブロック終端に余分な空行がある
対処法
  • 自動修正可能な箇所は修正され、それ以外は手動で対応
bash
$ rubocop -a

TestError(データーベース重複)

エラー内容
bin/rails test test/controllers/top_controller_test.rb:4



Finished in 0.087763s, 11.3943 runs/s, 0.0000 assertions/s.
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
Error: Process completed with exit code 1.
  • テスト中に、ユーザーのemailフィールドがユニーク制約に違反
  • test/fixtures/users.ymlでデータが重複していた
対応方法
  • FactoryBotをインストールし、ユニークなデータを動的に生成するよう変更
  • テストデータベースをリセットしてクリーンな状態に
データーベースのリセット

全てし終わったらテスト環境のデーターベースをリセットして、
最新の状態にする。

bash
$ bin/rails db:test:prepare

補足:ear:

今回GemDeviseも入れていたのでそれ関連のErrorも追記します。

Error内容
Error:
TopControllerTest#test_should_get_index:
NoMethodError: undefined method `sign_in' for #<TopControllerTest:0x0000ffff7806a130>
    test/controllers/top_controller_test.rb:9:in `block in <class:TopControllerTest>'

注目するべき分→ undefined method 'sign_in'

  • sign_inメソッドが未設定のため、認証テストでエラーが発生
  • Deviseのテスト用ヘルパーをtest/test_helper.rbに追加し解決
Minitestの場合
test/test_helper.rb
require "devise/test/integration_helpers" #追加 Deviseのテストヘルパーをインクルードする
class ActiveSupport::TestCase
  include Devise::Test::IntegrationHelpers #追加 テスト用のヘルパーを読み込む
end
テストコードの修正
test/controllers/top_controoler_test.rb
require "test_helper"

class TopControllerTest < ActionDispatch::IntegrationTest
  test "should get index" do
    user = FactoryBot.create(:user) # ユーザーをFactoryBotで作成
    sign_in user # Deviseの認証

    get root_path # テスト対象のリクエスト
    assert_response :success
  end
end
最後に$ bin/rails testをしてエラーが出なかったら成功でした。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?