2013-07-31 4 views
0

У меня есть неудачный тест Rspec, _pages_spec.rb. Я слежу за учебником Rails от Micheal Hartl.Неудача rspec test

Когда у меня есть второй "конец" в строке 83, все тесты проходят, но один:

Failures: 

    1) User pages signup edit with valid information 
    ←[31mFailure/Error:←[0m ←[31mit { should have_selector('div.alert.alert-suc 
cess') }←[0m 
     ←[31mexpected css "div.alert.alert-success" to return something←[0m 
←[36m  # ./spec/requests/user_pages_spec.rb:77:in `block (5 levels) in <top (
required)>'←[0m 

Finished in 1.28 seconds 
←[31m60 examples, 1 failure←[0m 

Failed examples: 

←[31mrspec ./spec/requests/user_pages_spec.rb:77←[0m ←[36m# User pages signup ed 
it with valid information ←[0m 

Вот код:

require 'spec_helper' 

describe "User pages" do 

    subject { page } 
    let (:base_title) {"Tom Gong's Sample App"} 

    describe "profile page" do 
    let(:user) { FactoryGirl.create(:user) } 
    before { visit user_path(user) } 
    it { should have_selector('h1',  text: user.name) } 
    it { should have_selector('title', text: user.name) } 
    end 

    describe "signup page" do 
    before { visit signup_path } 
    it { should have_selector('h1', text: 'Sign up') } 
    it { should have_selector('title', content: "#{base_title} | Sign up") } 
    end 
    describe "signup" do 

    before { visit signup_path } 
    let (:submit) { "Create my account" } 
    describe "with invalid information" do 
     it "should not create a user" do 
      expect { click_button submit }.not_to change(User, :count) 
     end 
     describe "after submission" do 
     before { click_button submit} 
     it { should have_selector('title', text: 'Sign up') } 
     it { should have_content('error') } 
     end 
    end 

    describe "with valid information" do 

    before do 
     fill_in "Name",   with: "Example User" 
     fill_in "Email",  with: "[email protected]" 
     fill_in "Password",  with: "foobar" 
     fill_in "Confirmation", with: "foobar" 
    end 
    it "should create a user" do 
     expect { click_button submit }. to change(User, :count).by(1) 
    end 
    describe "after saving the user" do 
     before { click_button submit } 
     let(:user) { User.find_by_email('[email protected]') } 
     it { should have_selector('title', text:user.name) } 
     it { should have_selector('div.alert.alert-success', text:'Welcome') } 
    end 
    end 
    describe "edit" do 
    let(:user) { FactoryGirl.create(:user) } 
    before { visit edit_user_path(user) } 
    describe "page" do 
     it { should have_selector('h1',  text: "Update your profile") } 
     it { should have_selector('title', text:"Edit user") } 
     it { should have_selector('a', href: 'http://gravatar.com/emails') } 
    end 
    describe "with invalid information" do 
     before { click_button "Save changes" } 
     it { should have_content('error') } 
    end 
    describe "with valid information" do 
     let(:new_name) { "New Name" } 
     let(:new_email) { "[email protected]" } 
     before do 
     fill_in "Name",    with: new_name 
     fill_in "Email",   with: new_email 
     fill_in "Password",   with: user.password 
     fill_in "Confirm Password", with: user.password 
     click_button "Save changes" 
    end 

     it { should have_selector('title', text: new_name) } 
     it { should have_selector('div.alert.alert-success') } 
     it { should have_link('Sign out', href: signout_path) } 
     specify { user.reload.name.should == new_name } 
     specify { user.reload.email.should == new_email } 
    end 
    end 
end 
end 

Можно ли найти проблему?

+0

Пожалуйста, обратите внимание, что вместо него вывешивается нецветная версия вывода. –

ответ

1

страницы пользователей подписаться редактировать с действительной информацией

Вот как это выглядит:

User pages 
    |- signup 
     |- edit 
      |- with valid information 

Это должно быть

страницы пользователя редактировать с действительной информацией

т.е.

User pages 
    |- edit 
     |- with valid information 

В настоящее время редактирования описано в разделе регистрации. Это не совсем так.

У меня второй "конец" в строке 83

Это должно быть сразу после линии 53, а не 83. т.е. прямо перед describe "edit" do.

С последовательным отступом вам не нужно угадывать, где поставить совпадение end, это должно быть очевидно из кода.

0

Сообщение об ошибке говорит вам о том, что страница не имеет селектор 'div.alert.alert-success'. It looks like the error is related to this line: это {должно have_selector («div.alert.alert-успех», текст: «Добро пожаловать»)} `

Капибара имеет изящную метод под названием save_and_open_page, который позволяет вам проверять HTML-файл, который анализирует Capybara. Вызовите этот метод и просмотрите источник, чтобы проверить селектор, который не работает для вас. Если у вас все еще есть проблемы, вставьте HTML-код, который соответствует селектору в вашем вопросе.

Вы должны очистить форматирование своего кода, потому что его очень трудно читать с несогласованным интервалом и отступом.