2014-11-10 8 views
9

Próbuję pisać specyfikacje dla poszczególnych funkcji w moich dekoratorów. Mam specyfikacje dla moich pomocników, takich jak poniżej (to tylko przykład):Jak określić konstruktory staplerów z 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 

Biorąc pod uwagę następujące dekorator, jak mogę napisać specyfikację dla funkcji?

book_decorator.rb

class BookDecorator < Draper::Decorator 
    delegate_all 

    def display_days 
    model.months_to_display * 30 
    end 
end 

Odpowiedz

10

Dla Państwa próbki, chciałbym spróbować z czymś takim:

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 
+0

To nie zadziała, jeśli kod testowy oczekuje, że @book nie będzie dekorowany, co jest zalecanym sposobem wykonywania czynności: https://github.com/drapergem/draper#when-to-decorate-o bjects – jelder

-2

Wystarczy użyć .decorate dla wygenerowanego podmiotu (z wykorzystaniem FactoryGirl lub Faker)

+0

Twój przykład jest ważny tylko dlatego, że Alter Lagos też odpowiedział: D –

+0

co masz na myśli ?! nie dostałem tego –