4

Capybara RSpec マッチャーを使用してプレゼンター メソッドをテストしようとしています。

ボタンをレンダリングするメソッドがあるとしましょう。これは、カピバラ rspec マッチャーを使用していない場合に作成するテストです。

it "should generate a button" do
  template.should_receive(:button_to).with("Vote").
    and_return("THE_HTML")
  subject.render_controls.should be == "THE_HTML"
end

カピバラ rspec マッチャーを使用して、これを行いたい:

it "should render a vote button" do
  subject.render_controls.should have_button('Vote')
end

このアプローチは、この記事http://devblog.avdi.org/2011/09/06/make-a-mockery-of-tdd/で提案されました。記事の中で、著者は次のように説明しています。 ."

しかし、私はこれを理解していません。render_controls が content_tag のみを返す場合、どのようにカピバラ rspec マッチャーを使用できますか?

4

2 に答える 2

6

luacassusの答えは正しいのですが、私は問題が何であるかを見つけました。テストにはcapybararspecマッチャーを含めていませんでした。Capybara rspecマッチャーを含めないと、次のようなエラーが発生します:undefined method has_selector?ActiveSupport :: SafeBuffer:0x9449590の場合

rspecマッチャーを含める場合、rspecマッチャーはすでに文字列と照合されるため、CapybaraStringメソッドを使用する必要はありません。

ここに、より詳細な例を残します。

require_relative '../../app/presenters/some_presenter'
require 'capybara/rspec'

describe 'SomePresenter'
  include Capybara::RSpecMatchers

  let(:template) { ActionView::Base.new }  
  subject { Presenter.new(template) }  

  it "should render a vote button" do
    subject.render_controls.should have_button('Vote')
  end
end
于 2012-04-11T01:40:19.600 に答える