目前在我的spec / 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
根据文档,decorator文件夹中的规范应该可以访问辅助方法,但是我的规范没有。我也试过手动标记我的规格,但似乎没有任何影响。
感谢您的光临。
答案 0 :(得分:8)
如果您想访问帮助程序,可以通过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/
答案 1 :(得分:2)
我遇到了同样的问题,在装饰器的辅助代理(.h)上调用辅助方法在测试中不起作用(在Draper 1.3中)。我最终解决了这个问题,尽管我对此并不满意:
my_decorated_object.h.extend ApplicationHelper
您的里程可能会有所不同,具体取决于您在助手中访问的控制器功能的数量。