ローカルのdocker環境ではパスするrpsecがcircleci上ではエラーとなってしまいます。
user, training, chatという3つのモデルがあり、user, trainingはhas_manyで複数のchatを持ち、chatはuser, trainingにbelong_toであるという関係です。
chatにはuser_id, training_idという属性がありuser, trainingと関連付けすることができます。
user_id, training_id はバリデーションにより必須項目に設定しています。
なぜ、ローカルではパスするのにcircleciではエラーとなってしまうのか、ご知見ありましたらアドバイスいただけると幸いです。
エラーになるテスト chat modelのrspec
require 'rails_helper' RSpec.describe Chat, type: :model do before do @chat = FactoryBot.create(:valid_chat) end it 'should be vaild' do expect(@chat).to be_valid end it 'user_id should be present' do @chat.user_id = '' expect(@chat).not_to be_valid end it 'training_id should be present' do @chat.training_id = '' expect(@chat).not_to be_valid end end
エラーの内容
バリエーションでpresence:true設定しているuser_id, training_id が空白だという内容
Failures: 1) Chat should be vaild Failure/Error: @chat = FactoryBot.create(:valid_chat) ActiveRecord::RecordInvalid: Validation failed: User must exist, Training must exist # ./spec/models/chat_spec.rb:5:in `block (2 levels) in <top (required)>' 2) Chat user_id should be present Failure/Error: @chat = FactoryBot.create(:valid_chat) ActiveRecord::RecordInvalid: Validation failed: User must exist, Training must exist # ./spec/models/chat_spec.rb:5:in `block (2 levels) in <top (required)>' 3) Chat training_id should be present Failure/Error: @chat = FactoryBot.create(:valid_chat) ActiveRecord::RecordInvalid: Validation failed: User must exist, Training must exist # ./spec/models/chat_spec.rb:5:in `block (2 levels) in <top (required)>'
models/chats.rb
class Chat < ApplicationRecord belongs_to :user belongs_to :training validates(:user_id, presence: true) validates(:training_id, presence: true) end
factoryBotのテスト用データ
FactoryBot.define do factory :valid_chat, class: Chat do content { 'test' } user_id { 1 } training_id { 1 } end factory :invalid_chat, class: Chat do content { 'test' } user_id { nil } training_id { nil } end end
chat modelを作成した時のmigration
class CreateChats < ActiveRecord::Migration[6.1] def change create_table :chats do |t| t.text :content t.references :user, null: false, foreign_key: true t.references :training, null: false, foreign_key: true t.timestamps end add_index :chats, [:user_id, :created_at] end end
schema.rb
ActiveRecord::Schema.define(version: 2021_03_12_233523) do create_table "chats", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.text "content" t.bigint "user_id", null: false t.bigint "training_id", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["training_id"], name: "index_chats_on_training_id" t.index ["user_id", "created_at"], name: "index_chats_on_user_id_and_created_at" t.index ["user_id"], name: "index_chats_on_user_id" end . . . end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/23 22:17
2021/03/23 22:25