2010-08-12 3 views
0

Я работаю в Rspec из ROR .. Я пытаюсь проверить свои контроллеры с помощью RSpec.i, у меня есть контроллер пользователей с функциями, такими как новые, теги и т. Д.Rspec тест на существование действия не работает

я создал файл под SPEC/users_controller_spec.rb

и добавлены тестовые случаи, как.

require 'spec_helper' 

describe UsersController do 
    integrate_views 

    it "should use UsersController" do 
    controller.should be_an_instance_of(UsersController) 
    end 


    describe "GET 'new'" do 
    it "should be successful" do 
     get 'new' 
     response.should be_success 
    end 

    it "should have the title" do 
     get 'new' 
     response.should have_tag("title", "First app") 
    end 
    end 
end 

который получает пропуск.

Но когда я добавить тестовый пример для тегов .. как

describe "GET 'tags'" do 
    it "should be successful" do 
     get 'tags' 
     response.should be_success 
    end 
    end 

это приводит к ошибке, как

F ...

1) 'UsersController GET' теги «должен быть успешным» FAILED ожидаемый успех? для возврата true, получил false

Почему это происходит так? Я очень новичок в ROR и не могу найти причину, почему я получаю эту ошибку. Как это сделать. Также я попробовал Url

http://localhost:3000/users/tags который работает для меня .. Но на тестирование с использованием $ спецификации спецификации/я получаю сообщение об ошибке ..

+0

Можете ли вы показать свой маршрут для этого контроллера? – bjg

+0

Я искал в route.rb для существования map.tags '/ tags',: controller => 'users',: action => 'tags' Но его там не было ... Даже если бы я добавил это и запустите spec im, получив ту же ошибку. – useranon

ответ

0

Ваш тест может быть стенает по ряду причин. Требуется ли для маршрута идентификатор в хэш-параметре? Переадресовано ли действие контроллера? Контроллер поднимает ошибку?

Чтобы узнать причину сбоя, вам нужно посмотреть код контроллера и/или routes.rb. Обратите внимание на фильтры before в контроллере, которые не могут позволить действию достичь вообще.

0

Вам необходимо добавить пользовательские маршруты, которые не входят в 7 маршрутов по умолчанию. Предполагая, что у вас есть resources :users в пределах ваших маршрутов, вам нужно будет его изменить. Я также предполагаю, что ваш маршрут тегов уникален для отдельных пользователей.

resources :users do 
    member do 
    # creates /users/:user_id/tags 
    get :tags 
    end 
end 

А в тесте RSpec вы могли бы назвать его как

describe '#tags' do 
    user = create :user 
    get :tags, user_id: user.id 
end 

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

resources :users do 
    collection do 
    # creates /users/tags 
    get :tags 
    end 
end 
Смежные вопросы