J'ai une petite application dans les rails 5. J'ai essayé d'utiliser Rspec pour le tester mais j'ai échoué avec le modèle readonly.Rspec test readonly modèle
J'ai readonly modèle Produit et modèle normal ProductMsp. Le second a est la liste de tous les prix associés au produit et est stocké dans la base de données Rails. Le produit est une connexion externe en lecture seule avec une autre base de données pour retirer la liste des produits.
J'ai ajouté l'association au produit à 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
Je n'ai ajouté aucun nouveau test. Quand je lance rspec une fois de plus, j'ai des échecs. Probablement que rspec veut créer des produits, mais ne peut pas en raison de la table de base de données 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)>'
Ci-dessous omet test: (il y a plus d'échecs)
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
spec/usines/products.rb
FactoryGirl.define do
factory :product do
id 11
name 'Porsche Cayenne'
end
end
et app/modèle/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)}
A la question principale est: Comment faire face à l'essai et les modèles en lecture seule?
Est-ce que rspec convient?
dois-je me débarrasser des tests modèles en lecture seule
Je recherche par internet, mais je ne trouve pas d'exemples de ce problème. J'ai besoin de construire une application au-dessus d'une autre base de données, mais j'aimerais la faire tester d'une manière ou d'une autre. :-)
Avez-vous essayé d'ajouter 'skip_create' à votre usine' product'? Je suppose que cela devrait aider – Ngoral
Merci beaucoup pour votre aide. C'était si facile. Je me suis concentré sur rspec, mais la solution n'était pas là. – rpeczykowski