Интеграционное тестирование с Ruby on Rails - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь следовать учебнику по ruby ​​on rails и выполнять тестирование интеграции.

Сначала я запускаю команду: bundle exec rspec spec/

И она говорит мне все, кроме одного из моихшестнадцать тестовВот та часть, где я думаю, что проблема заключается в следующем:

 require 'spec_helper'
 describe "LayoutLinks" do

   it "should have the right links on the layout" do
    visit root_path
    click_link "Help"
    response.should have_selector('title', :content => "Help")
    click_link "Contact"
    response.should have_selector('title', :content => "Contact")
    click_link "Home"
    response.should have_selector('title', :content => "Home")
    click_link "Sign up now!"
    response.should have_selector('title', :content => "Sign Up")
    click_link "About"
    response.should have_selector('title', :content => "About")
  end
end

В результате я получаю следующее:

Failure/Error: response.should have_selector('title', :content => "Help")
   expected following output to contain a <title>Help</title> tag:
#home.html.erb page's source shown
<!DOCTYPE html>
   <html>
   <head>
   <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
   <title>Ruby on Rails Tutorial Sample App | Home</title> 
   #The line above is why the test fails. 
   #It is loading home.html.erb instead of help.html.erb
   .
   .
   .
   # ./spec/requests/layout_links_spec.rb:34:in `block (2 levels) in <top (required)>'

Я могу перемещаться по порядку тестов, и это всегдалучший тест, который не проходит.Это заставляет меня верить, что здесь что-то не так, а не с реальным кодом rails.Я также могу перейти на демонстрационный сайт, и ссылки работают, и они переходят на правильные страницы.Я посмотрел на другие проблемы, которые другие люди имели с этим, и я не могу найти никого, кто имеет такие же проблемы.Как я могу решить эту проблему?

Обновление:

noahc:sample_app noahc$ rake routes
users_new GET /users/new(.:format)     {:controller=>"users", :action=>"new"}
   signup     /signup(.:format)        {:controller=>"users", :action=>"new"}
  contact     /contact(.:format)       {:controller=>"pages", :action=>"contact"}
    about     /about(.:format)         {:controller=>"pages", :action=>"about"}
     help     /help(.:format)          {:controller=>"pages", :action=>"help"}
              /help(.:format)          {:controller=>"pages", :action=>"help"}
     root     /                        {:controller=>"pages", :action=>"home"}
pages_home GET /pages/home(.:format)    {:controller=>"pages", :action=>"home"}
pages_contact GET /pages/contact(.:format) {:controller=>"pages", :action=>"contact"}
pages_about GET /pages/about(.:format)   {:controller=>"pages", :action=>"about"}
pages_help GET /pages/help(.:format)    {:controller=>"pages", :action=>"help"}

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Я не использую rspec, но это может быть связано с тем, что "Home"! = "Пример учебного приложения по Ruby on Rails | Home"

Содержимое не совпадает, поэтому тест не пройден.

Кроме того, проверьте свою справочную ссылку в своем источнике, чтобы убедиться, что она действительно идет туда, где вы думаете ...

1 голос
/ 18 октября 2011

Нет, я бы порекомендовал разбить этот тест на несколько тестов, по одному для каждого названия, которое вы хотели бы протестировать. Это немного облегчит вам точно определить, что не так. Примерно так:

it "should have a link to 'Help'" do
  visit root_path
  response.should have_selector('a', :href => help_path, :content => "Help")
  click_link "Help"
  response.should have_selector('title', :content => 'Help')
end

it "should have a link to 'Contact'" do
  visit root_path
  response.should have_selector('a', :href => contact_path, :content => "Contact")
  click_link "Help"
  response.should have_selector('title', :content => 'Contact')
end

и т. Д. ... Это поможет вам точно определить, что происходит, и где вы испытываете проблему. Кроме того, что, по его словам, отображалось в источнике страницы? Вы отключили сообщение об ошибке, прежде чем оно объяснило, что на самом деле произошло в вашем фрагменте вставки ... Посмотрите, что на самом деле возвращает код, чтобы узнать, что такое заголовок и как / почему он отличается от того, что ожидает rspec. 1004 *

...