突然の投稿失礼します。
rails g scaffold_controller で生成したspecのテストコードを実行する際に、
外部キーを持つmodelのcreate!メソッドでバリデーションエラーが発生し困っています。
controllerからのcreate文は正常に実行されるのですが、specだけ何故か失敗するので原因が掴めずにいます。
###前提・実現したいこと
RSpecでviewのテストを行いたい
###バージョン
- ruby 2.3.1
- rails 5.0.2
###発生している問題・エラーメッセージ
shipping_addresses/edit renders the edit shipping_address form Failure/Error: @shipping_address = assign(:shipping_addresses,ShippingAddress.create!(name: 'テスト発送先1', shop_id: 1)) ActiveRecord::RecordInvalid:バリデーションに失敗しました: Shopを入力してください
###該当のソースコード
問題のテストコードは以下になります
Ruby
1require 'rails_helper' 2 3RSpec.describe "shipping_addresses/edit", type: :view do 4 before do 5 @shipping_address = assign(:shipping_addresses,ShippingAddress.create!(name: 'テスト発送先1', shop_id: 1)) 6 end 7 8 it "renders the edit shipping_address form" do 9 render 10 11 assert_select "form[action=?][method=?]", shipping_address_path(@shipping_address), "post" do 12 end 13 end 14end
shipping_address.rb (今回失敗しているModel)
Ruby
1# frozen_string_literal: true 2 3class ShippingAddress < ApplicationRecord 4 belongs_to :shop 5end 6
shop.rb(shipping_addressの外部キーとなるModel)
Ruby
1# frozen_string_literal: true 2 3class Shop < ApplicationRecord 4 has_many :shipping_addresses 5end 6
shipping_addressesテーブルの情報(schemaより一部抜粋)
ruby
1 create_table "shipping_addresses", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 2 t.integer "shop_id" 3 t.string "name", limit: 45 4 t.datetime "created_at", null: false 5 t.datetime "updated_at", null: false 6 t.index ["shop_id"], name: "index_shipping_addresses_on_shop_id", using: :btree 7 end
###試したこと
controller , seedでShippingAddress.create!
を行った際はエラーは発生せず、
データが正常に登録されました。
specに関してはshopを入力しなければならないというバリデーションエラーが出るため頭を抱えています。
どなたかご助言を宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。