2017-08-15 24 views
0

レール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はそれに適していますか?

  • は、私がテストの私はインターネットで検索する読み取り専用モデル

を取り除く必要がありますが、私はこのような問題のいずれかの例を見つけることができませんでした。私は別のデータベースの上にアプリケーションを構築する必要がありますが、何とかテストしてみたいと思います。 :-)(将来サーチャーのために:))

+0

'skip_create'を' product'工場に追加しようとしましたか?私はそれが助けてくれると思います – Ngoral

+0

ありがとう、あなたの助けを大変ありがとう。それはとても簡単でした。私はrspecに焦点を当てましたが、解決策はありませんでした。 – rpeczykowski

答えて

0

あなたは、読み取り専用モデルのためにあなたの工場にskip_createを追加する必要があります。これにより、データベースレコードの作成を避けることができ、この問題を解決する必要があります。また、(ActiveRecord :: Baseから継承されない)データベースに接続されていないクラスのファクトリを作成したい場合にも便利です。

関連する問題