Если это контроллер spe c, вы хотите передать имя метода, а не маршрут.
require 'rails_helper'
describe HeartbeatController do
it 'succeeds' do
get :show
expect(response).to be_success
end
end
Спецификации контроллера фактически не управляют всем стеком рельсов - они просто создают ложный запрос и передать его экземпляру контроллера и вызвать метод на контроллере.
Причина, по которой вы получаете ошибку маршрутизации, заключается в том, что ActionController::TestCase::Behavior
пытается проверить, существует ли маршрут для данного заданного комбинированного имени контроллера / метода. Таким образом No route matches {:action=>"/heartbeat", :controller=>"heartbeat"}
.
Весь этот процесс модульного тестирования контроллеров, как известно, имеет серьезные недостатки, поскольку вы макетируете огромные части платформы и фактически не тестируете, что делают контроллеры - они отвечают на запросы HTTP. Поскольку уровень маршрутизации и стек промежуточного программного обеспечения макетируются, ваши тесты не будут охватывать их, как настоящий тест интеграции.
Обе команды Rails и RSpe c препятствуют непосредственному тестированию контроллеров . Вместо этого используйте спецификации запроса , которые фактически управляют всем стеком.
# spec/requests/heartbeats_spec.rb
require 'rails_helper'
describe 'Heartbeats', type: :request do
describe "GET /heartbeats" do
it 'succeeds' do
get '/heartbeat'
expect(response).to be_successful
end
end
end