Как определить декораторы драпировки с помощью rspec.

Я пытаюсь написать спецификации для отдельных функций в моих декораторах. У меня есть спецификации для моих помощников, как показано ниже (это просто пример):

book_helper.rb

module BookHelper
  def heading_title
    @book.name[0..200]
  end
end

book_helper_spec.rb

require 'spec_helper'

describe BookHelper do
  subject { FactoryGirl.build(:book) }

  it 'limits title to 200 characters' do
    title = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium.'
    subject.name = title
    subject.save
    @book = subject
    expect(heading_title).to eq(title[0..200])
  end
end

Учитывая следующий декоратор, как я могу написать спецификацию для функции?

book_decorator.rb

class BookDecorator < Draper::Decorator
  delegate_all

  def display_days
    model.months_to_display * 30
  end
end

person Zack    schedule 10.11.2014    source источник


Ответы (2)


Для вашего образца я бы попробовал что-то вроде:

require 'spec_helper'

describe BookDecorator do
  let(:book) { FactoryGirl.build_stubbed(:book).decorate }

  it 'returns the displayed days' do
    expect(book.display_days).to eq('600')
  end

end
person Alter Lagos    schedule 20.01.2015
comment
Это не сработает, если тестируемый код ожидает, что @book не будет украшен, что является рекомендуемым способом: github.com/drapergem/draper#when-to-decorate-objects - person jelder; 22.09.2016

Просто используйте .decorate для сгенерированного объекта (используя FactoryGirl или Faker)

person Ahmed Samir Shahin    schedule 07.05.2015
comment
Ваш пример действителен только потому, что Alter Lagos тоже ответил, ;D - person Bruno Casali; 24.10.2016
comment
Что ты имеешь в виду?! не понял - person Ahmed Samir Shahin; 10.11.2016