Тестовый просмотр rspec с декоратором - PullRequest
2 голосов
/ 13 марта 2012

Я пытаюсь проверить мой взгляд с помощью Rspec. На мой взгляд, у меня есть декоратор, созданный Draper. Этот Декоратор выставлен драгоценным камнем достойной экспозиции.

Я создаю свой тест rspec следующим образом:

require 'spec_helper'

describe "boats/show.html.slim" do

  let(:boat_decorate) { BoatDecorator.new(get_boat) }
  let(:search) { Search.new }

  before do
    view.stub(:boat_decorate) { boat_decorate }
    view.stub(:search) { search }
    render :template => 'boats/show.html.slim'
  end 

  it 'should see titlte' do
    rendered.should have_selector(:h1, :content => boat_decorate.title)
  end                                                                                                                                                                                
end

В моей заглушке моего помощника я создаю Draper Decorator. В этом декораторе у меня есть метод для вызова некоторого помощника link_to.

class BoatDecorator < ApplicationDecorator

  decorates :boat

  def region_link
    h.link_to region_name, '#', :title => region_name                                                                                                                                
  end

end

Но если я запускаю этот тест, у меня появляется ошибка:

  1) boats/show.html.slim should see titlte
     Failure/Error: render :template => 'boats/show.html.slim'
     ActionView::Template::Error:
       undefined method `link_to' for nil:NilClass

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

Ответы [ 2 ]

6 голосов
/ 20 марта 2012

Нам нужно сделать как спецификации декоратора и добавить в настройку: ApplicationController.new.set_current_view_context

require 'spec_helper'

describe "boats/show.html.slim" do

  let(:boat_decorate) { BoatDecorator.new(get_boat) }
  let(:search) { Search.new }

  before do
    ApplicationController.new.set_current_view_context
    view.stub(:boat_decorate) { boat_decorate }
    view.stub(:search) { search }
    render :template => 'boats/show.html.slim'
  end 

  it 'should see titlte' do
    rendered.should have_selector(:h1, :content => boat_decorate.title)
  end                                                                                                                                                                                
end
0 голосов
/ 07 сентября 2014

Другим подходом может быть тестирование класса декоратора изолированно с помощью rspec и capybara. Здесь - пример кода, показывающий использование этого подхода.

...