2014-02-12 7 views
1

У меня есть код (который я отменил для целей этого примера), и я ищу несколько советов по наилучшему тестированию с помощью RSpec.Тестирование блока с RSpec

ActionController::Renderers.add :liquid do |obj, options| 
    # Set the mime type as HTML. 
    self.content_type ||= Mime::HTML 

    # Do some clever stuff.... 

    # Render the liquid layout. 
    self.response_body = layout.render(obj) 
end 

Этот блок добавляется к набору через вызов add() и выполняется позднее.

Я ищу, чтобы проверить функциональность блока, чтобы он сделал все, что я хочу, например, установить правильные переменные (self.content_type) и вызвать правильные библиотеки (layout.render).

Я никогда не тестировал содержимое блока, как это, поэтому, глядя на некоторые дружеские советы о том, как лучше всего это сделать, могу ли я проверить блок как есть, или он нуждается в реорганизации в внешний метод, который может быть протестированным?

+0

Что вы должны сделать, а это проверить эффект блок обеспечивает. В тесте контроллера отправьте запрос и утвердите, что возвращаемый ответ отображается правильно. Вы не хотите, чтобы ваши тесты были тесно связаны с реализацией. – DiegoSalazar

ответ

1

Вы можете заполнить дополнение Renderer и проверить вызов блока из вашего кода. В коде ниже я предполагаю, что фрагмент кода вы дали внутри метод с именем register_liquid:

let(:obj) { double(:obj) } 
let(:options) { double(:options) } 

before do 
    allow(ActionController::Renderers).to receive(:add).with(:liquid).and_yield(obj, options) 
end 

it 'sets content type' do 
    expect(subject).to receive(:content_type=).with(Mime::HTML) 

    subject.register_liquid 
end 
Смежные вопросы