Как я могу получить доступ к вспомогательным методам в моих файлах спецификаций декоратора, используя 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
Ваш пробег может варьироваться в зависимости от того, сколько функций контроллера вы получаете в своем помощнике.