2014-05-24 3 views
4

Я хочу, чтобы проверить, что приложение реагирует с 404 ошибкой и имеют код:Rspec & Rails: как проверить контроллер на ошибку 404? Это дает «маршрут не совпадает» ошибка вместо 404

require 'spec_helper' 

describe Admin::UsersController do 

    describe "GET new" do 
    before { get :new } 
    it { should respond_with(404) } 
    end 
end 

Мои маршруты:

namespace :admin, module: :admin do 
    resources :users, except: [:new, :create] 
end 

Когда я запустил локальный сервер в режим производства он действительно отвечает 404 ошибок, но когда я бегу RSpec тест, он дает мне следующее:

1) Admin::UsersController GET new shold not be successful 
    Failure/Error: get :new 
    ActionController::UrlGenerationError: 
    No route matches {:action=>"new", :controller=>"admin/users"} 
    # ./spec/controllers/admin_users_spec.rb:7:in `block (3 levels) in <top (required)>' 

Как я могу проверить это правильно?

Обновлено с правильным ответом:

describe "GET new" do 
    it "should not route to new" do 
    expect(get: :new).not_to be_routable 
    end 
end 
+1

возможно дубликат [ Тестирование страниц ошибок в Rails с Rspec + Capybara] (http: // stackover flow.com/questions/13996259/testing-error-pages-in-rails-with-rspec-capybara) –

+0

Это не помогает. Я уже это читал. Нет разницы. – kovpack

ответ

4

Я думаю, вы можете проверить его с помощником { get :new }.should_not be_routableaccording to this

Обновление от комментариев:

Должно быть expect(:get => :new).not_to be_routable

+3

Ваша версия тоже не сработала, но немного измененная работала отлично: 'expect (: get =>: new) .not_to be_routable' – kovpack

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