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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

2782閲覧

Rails テスト時にConstraintExceptionが発生

kurokoSin

総合スコア133

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/04/25 09:25

編集2022/01/12 10:55

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

事象

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問