4

shared_examples_forをすべきかについての理解に欠陥があるかもしれませんが、聞いてください。

基本的に、ページとフォーラムのページにindex表示される共通のナビゲーション バーがあります。したがって、ページとページnewの両方でナビゲーション バーのテストを実行する必要があります。以下のコードを使用してそれを達成することを望んでいました。しかし、何が起こったのかというと、単純にテストケースが実行されていません。確認するために、スコープ内で失敗するテスト ケースを作成しましたが、テストは失敗しませんでした。indexnewshared_examples_forshared_examples_forshared_examples_for

私は何を間違っていますか?

require 'spec_helper'

describe "Forums" do

  subject { page }

  shared_examples_for "all forum pages" do

    describe "should have navigation header" do
      it { should have_selector('nav ul li a', text:'Home') }
      it { should have_selector('nav ul li a', text:'About') }
    end
  end

  describe "Index forum page" do
    before { visit root_path }
    ...
  end

  describe "New forum page" do
    before { visit new_forum_path }
    ...
  end

end
4

2 に答える 2

12

これらのものを結び付けるための素晴らしい意図を明らかにする方法は次のとおりです。

shared_examples_for 'a page with' do |elements|
  # the following two would be navs for a page with
  it { should have_selector 'h1', text: 'About' }
  it { should have_selector 'a', text: 'Songs' }
  # these would be dynamic depending on the page
  it { should have_selector('h1',    text: elements[:header]) }
  it { should have_selector('title', text: full_title(elements[:title])) }
end

describe "About" do
  it_behaves_like 'a page with', title: 'About', header: 'About Header' do
    before { visit about_path }
  end
end

describe "Songs" do 
  it_behaves_like 'a page with', title: 'Songs', header: 'Songs Header' do
    before { visit songs_path }
  end
end
于 2012-06-19T03:15:28.767 に答える