質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.34%

Rails テスト時にConstraintExceptionが発生

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,178

kurokoSin

score 110

ご教示のほどよろしくお願いします。

 事象

Rails g modelでテーブルを追加したところ
テスト時に以下の様なエラーが発生する様になりました。

実行コマンド

$ rake test


実行結果(抜粋)

22) Error:
BattlesControllerTest#test_should_get_battle_losed_the_Tribal:
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: NOT NULL constraint failed: skill_bases.created_at: INSERT INTO "skill_bases" ("ActionId", "Name", "Description", "Timing") VALUES (1, '暗殺', '攻撃対象が王国である時、自身のATKが@s%増加する。', 1)

 試したこと

こちらのサイト を自分なりに読んでみたところ「再作成してください」と読み取りましたので、実施してみましたが変わりありませんでした。
(再作成の方法としては、
   rails d model SkillBase;
   sqlite3 db/test.sqlite3 -cmd "drop table skill_bases";
   sqlite3 db/development.sqlite3 -cmd "drop table skill_bases";
 を実施後、下記model生成コマンドを実施しております。)

また、このmodelに関して、初回作成時にstringとすべきところを「String」(頭が大文字)で間違って作成しまった経緯もございます。

 疑問点

migrateファイルにあるt.timestamps null: falseのカラムが影響しているように思えます。
また、logを参照したところ、このファイルだけcreated_atの指定が抜けておりますが、
どうしてこうなっているのかわかりません。

 依頼内容

ご存知の方いましたら、
原因、対応方法を教えて頂けます様お願い致します。

 エラーが発生しているファイルの情報

model生成時コマンド

$ rails g model SkillBase ActionId:integer Name:string Description:string Timing:integer

db/migrate/20160425001739_create_skill_bases.rb

class CreateSkillBases < ActiveRecord::Migration
  def change
    create_table :skill_bases do |t|
      t.integer :ActionId
      t.string :Name
      t.string :Description
      t.integer :Timing

      t.timestamps null: false
    end
  end
end

test/fixtures/skill_bases.yml

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  ActionId: 1
  Name: 暗殺
  Description: 攻撃対象が王国である時、自身のATKが@s%増加する。
  Timing: 1

two:
  ActionId: 2
  Name: 汚染
  Description: 攻撃対象が精霊である時、自身のATKが@s%増加する。
  Timing: 1

 # (以下省略)

log/test.log

Fixture Delete (0.1ms)  DELETE FROM "skill_bases"
  Fixture Insert (0.1ms)  INSERT INTO "skill_bases" ("ActionId", "Name", "Description", "Timing") VALUES (1, '暗殺', '攻撃対象が王国である時、自身のATKが@s%増加する。', 1)
   (0.4ms)  rollback transaction

 エラーが発生していないファイル

db/migrate/20160420234634_create_skill_infos.rb

class CreateSkillInfos < ActiveRecord::Migration
  def change
    create_table :skill_infos do |t|
      t.integer :SkillNo
      t.integer :ActionId
      t.integer :Rank
      t.integer :Effect

      t.timestamps null: false
    end
  end
end

test/fixtures/skill_infos.yml

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  SkillNo: 1
  ActionId: 1
  Rank: 1
  Effect: 30

log/test.log

Fixture Insert (0.1ms)  INSERT INTO "skill_infos" ("SkillNo", "ActionId", "Rank", "created_at", "updated_at", "id") VALUES (1, 1, 1, '2016-04-15 11:44:02', '2016-04-15 11:44:02', 298486374)

 バージョン情報

$ uname -a
Darwin myhostname.local 15.4.0 Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 x86_64
$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
$ rails -v
Rails 4.2.5

他に不足している情報等ありましたら教えてください。
追記致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る