4

現在、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

ドキュメントによると、デコレータ フォルダーに配置されたスペックはヘルパー メソッドにアクセスできるはずですが、私のスペックはそうではありません。また、手動でスペックにタグを付けようとしましたが、効果がないようです。

ご覧いただきありがとうございます。

4

2 に答える 2

8

ヘルパーにアクセスしたい場合は、 経由でアクセスできますyour_decorator.h.link_to

when you are setting the subject, you will need to make sure that the thing you are calling will get routed to the helper, there is nothing injected into your rspec example!

in your example it would be subject.h.link_to for calling a helper method.

i also think that there are a lot of wired things in your spec. your usage of let, subject and before are kind of disturbing for me...

here is a nice writeup about how to write clean rspec: http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/

于 2012-07-24T21:13:56.530 に答える
2

デコレーターのヘルパー プロキシ (.h) でヘルパー メソッドを呼び出すと、テスト (Draper 1.3) で機能しないという同じ問題が発生しました。私はこれにあまり満足していませんが、これでそれを回避することになりました:

my_decorated_object.h.extend ApplicationHelper

ヘルパーでアクセスするコントローラー機能の数によって、マイレージは異なる場合があります。

于 2014-05-09T20:04:27.937 に答える