2013-02-21 1 views
1

окружающей среды: Rails 3.2.12, RSpec 2,12«Нет маршрут не соответствует» ошибке для маршрута без контроллера в рельсах/RSpec

Я пытаюсь самонастройки приложения с очень простым тестом маршрутизации. Тест не работает, и я не вижу, что может быть неправильным.

Вот тест, который не удается:

# spec/routing/meow_route_spec.rb 
require 'spec_helper' 
describe "meow routes" do 
    it "routes post /meows to meows#create" do 
    expect(:post => "/meows").to route_to(
     :controller => "meows", 
     :action => "create", 
    ) 
    end 
end 

И мой маршрут:

# config/routes.rb 
Meowserver::Application.routes.draw do 
    resources :meows 
end 

rake routes говорит мне:

polk:meowserver dpassage$ rake routes 
    meows GET /meows(.:format)   meows#index 
      POST /meows(.:format)   meows#create 
new_meow GET /meows/new(.:format)  meows#new 
edit_meow GET /meows/:id/edit(.:format) meows#edit 
    meow GET /meows/:id(.:format)  meows#show 
      PUT /meows/:id(.:format)  meows#update 
      DELETE /meows/:id(.:format)  meows#destroy 

Но когда я бегу RSpec, я получаю эту ошибку:

1) meow routes routes post /meows to meows#create 
    Failure/Error: expect(:post => "/meows").to route_to(
    No route matches "/meows" 
    # ./spec/routing/meow_route_spec.rb:4:in `block (2 levels) in <top (required)>' 

Что здесь происходит? На самом деле это единственные файлы, которые были последними в моем приложении: даже контроллеры или модели просто пытаются построить его снаружи.

+0

Можете ли вы попробовать хотя бы добавить 'meows_controller.rb' в' app/controllers/'с помощью метода' create'? Я только что протестировал удаление контроллера, для которого я объявил маршруты, и он действительно бросает ошибку маршрутизации, когда вы пытаетесь достичь этого маршрута. Ошибка, которую я получаю, является ошибкой 'uninitialized constant'. – Max

+0

Вот такая ошибка, которую я бы ожидал получить! Получение ошибки «Нет соответствия маршрутов» просто отправляет вас по неправильному пути. – dpassage

ответ

1

Ну, оказывается, что добавление в контроллер решает проблему. Я добавил следующее:

# app/controllers/meows_controller.rb 
class MeowsController < ApplicationController 
end 

... и теперь тест проходит. Очень неприятное сообщение об ошибке!

+0

Я просто боролся с этим некоторое время. Я удивлен, что для прохождения маршрута требуется контроллер. Маршрут определяется, отображается в «рейк-маршрутах», проверяется с помощью консоли и печатается (с правильными значениями) в тесте. Очень странно. Спасибо, что подтвердили это. Я закончил тем, что добавил пустой класс контроллера прямо в спецификационный файл маршрутизации, чтобы позволить пройти тест без реализации реального контроллера. –