2015-01-03 3 views
0

Im с использованием RSpec v3.1.0 и Capybara v2.3.0 в моих рельсах. У меня есть следующее в моем spec/features/user_creates_todo_spec.rb.Ошибка Rspec для проверки на отказ, отличная от ошибки, видимой в браузере

require 'rails_helper' 

feature 'User creates todo' do 
    scenario 'successfully' do 
     visit root_path 

     click_on 'Add a new todo' 
     fill_in 'Title', with: 'Buy milk' 
     click_on 'Submit' 

     expect(page).to have_css '.todos li', text: 'Buy milk' 
    end 
end 

Тогда в моем приложение/просмотров/несделанного/index.html.erb, я добавил следующее:

<%= link_to "Add a new todo", new_todo_path %> 

Когда я запускаю Rspec спецификации/особенности/user_creates_todo_spec.rb, тест не с ошибкой Capybara :: ElementNotFound: Не удалось найти ссылку или кнопку «Добавить новый todo»

Однако, ожидая, что ошибка будет : Неопределенная локальная переменная или метод 'new_todo_path', так как у меня уже есть ссылка, определенная в моем представлении. И странно, что когда я запускаю сервер rails и перехожу к корневому пути из браузера, я вижу неопределенную локальную переменную или метод «new_todo_path». Также я вижу неопределенную ошибку пути, когда я просто запускаю rake из корня моего приложения. Итак, почему это происходит, когда я запускаю отдельный файл spec, используя rspec, я вижу другую ошибку, хотя у меня есть ссылка, добавленная на страницу?

Благодаря

ответ

1

Не забывайте, что Capybara открывает сеанс браузера, который запускается в новом процессе и перемещается по пути, точно так же, как пользователь. Ваше приложение Rails действительно может создать исключение, но Capybara только смотрит на ответ в браузере - он не знает, что происходит в процессе работы сервера Rails. Поэтому он добросовестно посещает URL-адрес, получает 500 страниц ошибок, ищет ссылку и (конечно) не находит ее.

+0

Имеет смысл. Благодаря ! :) –

0

Это происходит потому, что ссылка не добавляется на страницу. new_todo_path не определен, что, вероятно, означает, что вы не добавили правильные маршруты для него в свой файл routes.rb.

+0

Спасибо за ответ. Но почему тогда, когда я просто запускаю rake из моего корня проекта, отображается ожидаемая ошибка Undefined local variable или метода 'new_todo_path'? , Как я уже упоминал в моем вопросе выше, у меня есть код link_to в моем приложении/views/todos/index.html.erb, все же, когда я запускаю спецификацию отдельно с помощью rspec, он жалуется на недостающую ссылку вместо неопределенного маршрута. –

+0

Потенциально связанные: [https://github.com/jnicklas/capybara/pull/660](https://github.com/jnicklas/capybara/pull/660) – Aventuris