2012-06-15 2 views
4

Возможно, у меня есть некорректное понимание того, что должно делать shared_examples_for, но выслушайте меня.Правильный способ использования shared_examples_for

В принципе, у меня есть общая панель навигации, которая отображается на странице index и new страница Форума. Поэтому я хочу, чтобы тесты для панели навигации выполнялись как на странице index, так и на странице new. Я надеялся, что код ниже, используя shared_examples_for, достигнет этого. Но произошло то, что тестовые примеры в shared_examples_for просто не работают. Чтобы проверить, я создал неудачный тестовый пример в области shared_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 

ответ

7

Не уверен, что ваш вопрос действительно, но, как необходимо это описать блок в общем примере? Это мой первый удар.

Этот код работает для меня.

shared_examples_for 'all pages' do 
    # the following two would be navs for all pages 
    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: header) } 
    it { should have_selector('title', text: full_title(title)) } 
end 

describe "About" do 
    before { visit about_path } 

    let(:title) {'About'} 
    let(:header) {'About Site'} 

    it_should_behave_like 'all pages' 
end 

describe "Songs" do 
    before { visit songs_path } 

    let(:title) { 'Songs Title' } 
    let(:header) { 'Songs' } 

    it_should_behave_like 'all pages' 
end 
+0

'it_should_behave_like«всех pages'' я забыл об этом немного. Спасибо. –

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 
+0

В вашем примере, соответствует ли "header:" соответствует "h1"? Если да, то как бы rpsec знал, чтобы дифференцировать h1, h2 и т. Д.? –

Смежные вопросы