レール5に小さなアプリケーションがあります。テストするのにRspecを使用しようとしましたが、読み取り専用モデルでは失敗しました。Rspecテスト読み取り専用モデル
私はReadonlyモデルProductと通常モデルProductMspを持っています。 2つ目は、Productに関連付けられたすべての価格のリストで、Rails DBに格納されています。製品は、他のデータベースとの外部読取り専用接続であり、製品のリストを引き出す。
spec/factories/product_msps.rbへの製品への関連付けを追加しました。
FactoryGirl.define do
factory :product_msp do
product_id 11
initial_date '01-01-2017'
expiry_date '31-01-2017'
msp 9999.99
association :product
end
end
私は新しいテストを追加しませんでした。 rspecをもう一度実行すると、私は失敗を受けます。おそらくrspecは製品を作成したいが、readonlyデータベーステーブルが原因ではない。以下
Failures:
1) ProductMsp Validations initial_date cannot by empty
Failure/Error: pm = FactoryGirl.build(:product_msp, initial_date: nil)
ActiveRecord::ReadOnlyRecord:
Product is marked as readonly
# ./spec/models/product_msp_spec.rb:17:in `block (3 levels) in <top (required)>'
テストを失敗している(複数の障害がある)
require 'rails_helper'
RSpec.describe ProductMsp, type: :model do
it 'initial_date cannot by empty' do
pm = FactoryGirl.build(:product_msp, initial_date: nil)
pm.valid?
expect(pm.errors[:initial_date]).to include("can't be blank")
end
end
スペック/工場/ products.rb
FactoryGirl.define do
factory :product do
id 11
name 'Porsche Cayenne'
end
end
アプリ/モデル/ product.rb
をclass Product < ApplicationRecord
self.primary_key = 'tw_Id'
def readonly?
true
end
has_many :product_msps
default_scope {where(product_type:1).order(:name)}
主な質問は次のとおりです。テストの対処方法読み込み専用のモデルですか?
rspecはそれに適していますか?
- は、私がテストの私はインターネットで検索する読み取り専用モデル
を取り除く必要がありますが、私はこのような問題のいずれかの例を見つけることができませんでした。私は別のデータベースの上にアプリケーションを構築する必要がありますが、何とかテストしてみたいと思います。 :-)(将来サーチャーのために:))
'skip_create'を' product'工場に追加しようとしましたか?私はそれが助けてくれると思います – Ngoral
ありがとう、あなたの助けを大変ありがとう。それはとても簡単でした。私はrspecに焦点を当てましたが、解決策はありませんでした。 – rpeczykowski