/ / Utilisation des comparateurs Shoulda pour attr_reader - ruby-on-rails, ruby, rspec, shoulda

Utilisation de Shoulda Matchers pour attr_reader - ruby-on-rails, ruby, rspec, shoulda

Je voudrais tester une validation effectuée sur un attribut de la classe suivante:

class R
include ActiveModel::Validations

attr_reader :attribute

validates :attributes, presence: true

def initialize(attribute = {})
@attribute = attribute
end
end

Maintenant, mon test est comme ça:

RSpec.describe R, type: :model do
context "validations" do
subject { R.new(1) }

it { should validate_presence_of(:attribute) }
end
end

Mais cela entraîne une erreur:

NoMethodError:
undefined method `attributes=" for

Si je change l'attribut attr_reader en un attr_accessor, le test réussit.

Comment puis-je laisser l'attribut attr_read tel qu'il est et continuer à faire passer le test avec l'adaptateur Shoulda?

Réponses:

1 pour la réponse № 1

Shoulda "s validate_presence_of fonctionne en essayant de définir une valeur vide sur l’argument, il a donc besoin d’une méthode de définition et ne peut pas fonctionner avec attr_reader uniquement.


0 pour la réponse № 2

Vous pourriez probablement stub attribute= sur le sujet:

RSpec.describe R, type: :model do
context "validations" do
subject { R.new(1) }
before { subject.stub("attribute=") { |arg| subject.instance_variable_set(:attribute, arg) } }

it { should validate_presence_of(:attribute) }
end
end

Haven "t testé cela cependant.