Как я могу получить доступ к вспомогательным методам в моих файлах спецификаций декоратора, используя Draper 0.14.0

В настоящее время в моей спецификации /decorators/product_decorator_spec.rb у меня есть следующее:

require 'spec_helper'

describe ProductDecorator do
  let(:product) { FactoryGirl.create(:product) }

  subject do
    ProductDecorator.first
  end

  before do
    product
  end

  it 'should render the name attribute with a link to the product page' do
    subject.name.should == h.link_to(product.name, 'test')
  end
end

Когда я запускаю свою спецификацию, я получаю следующее:

F.....

Failures:

  1) ProductDecorator should render the name attribute with a link to the product page
     Failure/Error: subject.name.should == h.link_to(product.name, 'resr')
      NameError:
       undefined local variable or method `h' for #<RSpec::Core::ExampleGroup::Nested_2:0x007fbbf212c8b0>
     # ./spec/decorators/product_decorator_spec.rb:15:in `block (2 levels) in <top (required)>'

Finished in 0.98531 seconds
6 examples, 1 failure

Failed examples:

rspec ./spec/decorators/product_decorator_spec.rb:14 # ProductDecorator should render the name attribute with a link to the product page

Согласно документации, спецификации, помещенные в папку декоратора, должны иметь доступ к вспомогательному методу, а моя спецификация - нет. Я также попытался вручную пометить свои спецификации, но, похоже, не имеет никакого эффекта.

Спасибо за поиск.

2 ответа

Решение

Если вы хотите получить доступ к помощнику, вы можете сделать это через your_decorator.h.link_to,

когда вы устанавливаете тему, вам нужно будет убедиться, что вызываемая вещь будет перенаправлена ​​помощнику, и в вашем примере rspec ничего не добавлено!

в вашем примере это будет subject.h.link_to для вызова вспомогательного метода.

Я также думаю, что в вашей спецификации есть много проводных вещей. ваше использование let, subject а также before меня это беспокоит...

Вот хорошая статья о том, как написать чистый rspec: http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/

Я столкнулся с той же проблемой, когда вызов вспомогательных методов на вспомогательном прокси-сервере декоратора (.h) не работает в тесте (в Draper 1.3). Я закончил работать над этим с этим, хотя я не очень доволен этим:

my_decorated_object.h.extend ApplicationHelper

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

Другие вопросы по тегам