20

RSpec がコントローラーとビューのテストを分離できる方法は本当に気に入っていますが、カピバラのマッチャーをビューのテストで動作させるにはいくつか問題があります。私が基本的に達成しようとしているのは、次のようなものです。

describe "some page" do
  it "should render with lots of stuff" do
    assign ..
    render
    rendered.should have_button ('Any button') #or any capybara matcher, really
  end
end

cucumber または rspec コントローラー テストでスムーズに動作するようにカピバラと rails3 を構成する方法を示すネット上の投稿を見たことがありますが、これは実際には私が望んでいるものではありません。つまり、可能な限り低いレベルでビューをテストすることです。

また、これを行う別の方法がある場合(多くのカスタムコードを必要としないため、nokogiriまたは適切なツールを使用してレンダリングから特定のセレクターを抽出するマッチャーを作成できることがわかっているため)、それも素晴らしいでしょう-カピバラの使用は必須ではありません.

4

7 に答える 7

18

コントローラー (およびビューも) をテストするときに (Webrat バゲージなしで) Capybara マッチャーを使用するオプションが追加されました。私はこのように使用しています:

describe GlobalizeTranslationsController do

  render_views
  let(:page) { Capybara::Node::Simple.new(@response.body) }

  describe "PUT :update" do
    before do
      put :update
    end

    it "displays a flash notice" do
      page.should have_selector('p.notice')
    end

  end

end

完全なコード:

参考文献:

于 2011-08-05T14:04:23.363 に答える
11

現在、Capybara はビュー スペックでは動作しません (将来的に動作させる予定です)。最も簡単な答えはgem 'webrat'、Gemfile に追加するだけで、基本的に設定は完了です。あなたは持っていないかもしれませんが、have_buttonあなたは持っているでしょう.have_selectorhave_tag

ところで: 私が知る限り、カピバラと webrat は 1 つのプロジェクトで共存できます。

于 2011-03-10T12:01:42.433 に答える
9

Pawelの答えよりも少し単純ですが、要点は同じです。以下は、レール 3.1.0、rspec 2.6.0、カピバラ 1.1.1 で動作します。

page = Capybara::Node::Simple.new( rendered )
page.should have_content( "blah" )
于 2011-11-10T21:05:51.623 に答える
3

でカピバラのメソッドを呼び出すことはできませんrendered。これは単なる文字列です。ただし、 Capybara の string メソッドを使用renderedして、Capybara ノードをラップすることができます。次に、そのノードで Capybara のメソッドを呼び出すことができます。

describe "some page" do
  it "should render with lots of stuff" do
    assign ..
    render
    Capybara.string(rendered).should have_button('Any button')
  end
end

詳細については、次の投稿をご覧ください。

http://www.tamingthemindmonkey.com/2011/11/07/capybara-matchers-and-scoping-in-view-specs

于 2013-03-21T13:11:59.300 に答える
1

他のほとんどの回答が追加されてから変更があったため、この古い質問を更新します。

Capybara はビュー仕様をサポートするようになりました (すぐに使用できます)。これはCapybara のマスター ブランチに記載されています。

ドキュメントを引用するには:

最後に、Capybara マッチャーがビュー仕様でサポートされています。

RSpec.describe "todos/show.html.erb", type: :view do
  it "displays the todo title" do
    assign :todo, Todo.new(title: "Buy milk")

    render

    expect(rendered).to have_css("header h1", text: "Buy milk")
  end
end

追加のスタイル コードなしでのこれらのサポートlet(:page)は、以前のバージョンで追加されたようです。(カピバラ2.4.4および2.2で機能しています)。
また、限定されたマッチャーのサブセットのみがサポートされていることにも注意してください。ただし、 Capybara.stringを使用すると、より多くの機能を得ることができます。元:

expect(Capybara.string(rendered).first('td')).to have_no_content 'Tom Riddle'
于 2015-08-24T01:56:02.487 に答える
1

このページの下部にある「Webrat と Capybara」セクションでは、カピバラは rspec ビュー スペックでサポートされていないようです。

http://relishapp.com/rspec/rspec-rails

于 2011-01-23T09:04:03.060 に答える