Методы вспомогательного пути доступны не во всех файлах RSpe c - PullRequest
0 голосов
/ 03 марта 2020

Я примерно следую учебнику Rails Майкла Хартла , сейчас я пытаюсь настроить несколько тестов RSpe c. Это мой routes.rb

Rails.application.routes.draw do
  root 'static_pages#home'
  get  '/help',    to: 'static_pages#help'
  get  '/about',   to: 'static_pages#about'
  get  '/contact', to: 'static_pages#contact'
  get  '/signup',  to: 'users#new'
end

У меня есть файл spec/integration/site_layout_spec.rb, в котором я могу использовать вспомогательные методы, такие как signup_path:

# site_layout_spec.rb

require 'rails_helper'

RSpec.describe 'Root' do
  it 'shows the home page' do
    get signup_path # just to show it's working
    get root_path
    expect(root_path).to render_template('static_pages/home')
  end
end

У меня также есть файл spec/controllers/users_controller_spec.rb. В этом файле ни один из вспомогательных методов *_path не работает.

# user_controller_spec.rb

require 'rails_helper'

RSpec.describe 'User signup page' do
  it 'should be available' do
    get signup_path
    expect(signup_path).to exist
  end
end

При запуске rspec я получаю

Failure/Error: get signup_path
NoMethodError: undefined method `signup_path' for nil:NilClass
# ./spec/controllers/users_controller_spec.rb:5:in `block (2 levels) in <main>'

Почему помощники не работают в мой второй тест?

1 Ответ

1 голос
/ 03 марта 2020

Последний представляет собой контроллер spe c, там вы должны протестировать контроллер без маршрутизации, вызывая его действия:

get :new
...