2015-07-28 10 views
0

Я хотел бы проверить проверку делается на атрибут следующего класса:Использование Shoulda matchers для attr_reader

class R 
    include ActiveModel::Validations 

    attr_reader :attribute 

    validates :attributes, presence: true 

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

Теперь мой тест, как это:

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

    it { should validate_presence_of(:attribute) } 
    end 
end 

Но это приводит к ошибка:

NoMethodError: 
    undefined method `attributes=' for 

Если я изменю attr_reader на attr_accessor, тогда тест пройдет.

Как я могу оставить attr_reader так, как он есть, и все еще пройти тест с помощью соединителя Shoulda?

ответ

1

Работает validate_presence_of Shoulda, пытаясь установить пустое значение в аргументе, поэтому ему нужен метод setter и он не может работать только с attr_reader.

0

Вы могли бы окурок attribute= по теме:

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 

Не проверял это, хотя.

 Смежные вопросы

  • Нет связанных вопросов^_^