2010-10-02 4 views
1

Я следую примерам в Rails Tutorial website, и у меня возникают проблемы с тем, чтобы интеграционные тесты работали. В частности, пример в листинге 8.20 в section 8.4.2 в учебнике.Маршруты не доступны в тесте интеграции RSpec

В визит signup_path строки кода ниже я получаю следующее сообщение об ошибке: "неопределенная локальная переменная или метод` signup_path "

require 'spec_helper' 

describe "Users" do 
    describe "signup" do 
    describe "failure" do 
     it "should not make a new user" do 
     visit signup_path 
     fill_in "Name", :with => "" 
     fill_in "Email", :with => "" 
     fill_in "Password", :with => "" 
     fill_in "Confirmation", :with => "" 
     click_button 
     response.should render_template("users/new") 
     response.should have_selector("div#error_explanation") 
     end 
    end 
    end 
end 

Here's the full test file on github

Однако, если я бегу все тесты сразу, то я не получаю ошибку. Ошибка возникает только при выполнении этого индивидуального теста.

Мой проект можно посмотреть на GitHub here

Как исправить эту ошибку?

ответ

0

Вы должны изменить тест согласно листингу 8.21. Тест будет выглядеть следующим образом:

спецификации/запросы/users_spec.rb:

require 'spec_helper' 

describe "Users" do 
    describe "signup" do 
    describe "failure" do 
     it "should not make a new user" do 
     lambda do 
      get signup_path 
      fill_in "Name", :with => "" 
      fill_in "Email", :with => "" 
      fill_in "Password", :with => "" 
      fill_in "Confirmation", :with => "" 
      click_button "Sign up" 
      response.should have_selector("div#error_explanation") 
     end.should_not change(User, :count) 
     end 
    end 
    end 
end 
+0

Устранение строки 'response.should render_template ('users/new')' избавляется от ошибки, которую я получал, '@request должен быть ActionDispatch :: Request', но страница ответа пуста. Является ли этот пример неправильным или устаревшим, как он находится в учебнике? –

1

После небольшой борьбы я понял, что это не ID на всех (по крайней мере, в Rails 3.0.3), а скорее класс, названный id_error_explanation.

Фиксированный с заменой последнего бита с:

response.should have_selector('div.id_error_explanation').

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