2013-09-13 3 views
0

Я нашел много вопросов с тем же заголовком, но не нашел подходящего ответа.ActionController :: RoutingError: маршрут не совпадает с ошибкой при модульном тестировании

Я тестирует контроллер

Контроллер игрока

def create 
player = Player.create(params[':player']) 

if player.valid? 
    # if creation successful, log the player in: 
    player_session = PlayerSession.create(
    player: player, 
    session_token: ActiveSupport::SecureRandom.urlsafe_base64 
) 

    render json: {session_token: player_session.session_token} 
else 
    render json: {error: "Player name already exists."}, status: :unprocessable_entity 
end 
end 

Test Controller игрока

test "create" do 
    post(:create, 
      { 
       'player' => { 
        'player_name' => "usman", 
        'password' => 123, 
        'email' => '[email protected]' 
       } 
      } 
     ) 
    assert_select response.body 
end 

при выполнении тестового файла следующие ошибки отображения на консоли.

ActionController::RoutingError: No route matches {:player=>{"player_name"=>"usman", "password"=>123, "email"=>"[email protected]"}, :controller=>"pl 
ayers", :action=>"create"} 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:424:in `raise_routing_error' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:406:in `generate' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:453:in `generate' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:449:in `generate_extras' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:445:in `extra_keys' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_controller/test_case.rb:143:in `assign_parameters' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_controller/test_case.rb:402:in `process' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_controller/test_case.rb:47:in `process' 
    D:/jruby-1.7.1/lib/ruby/gems/shared/gems/actionpack-3.0.3/lib/action_controller/test_case.rb:355:in `post' 
    D:/Projects/lyricle/test/functional/players_controller_test.rb:5:in `test_create' 
    org/jruby/RubyBasicObject.java:1659:in `__send__' 

почему эта ошибка есть?

+0

Можете ли вы предоставить соответствующую конфигурацию маршрута от 'конфигурации/routes.rb'? –

+0

Ваш контроллер определен неверно! –

+0

Только следующий код 'App :: Application.routes.draw do end ' –

ответ

1

Вы должны указать define routes, если хотите, чтобы у вас был доступ к вашему контроллеру.

Итак, в вашем config/routes.rb:

App::Application.routes.draw do 
    resources :your_resource_plural_name 
end 
1

создать действие должно быть так:

def create 
@player = Player.new(params[:player]) 
#your code 
end 

также необходимо добавить новое действие, прежде чем создать действие:

def new 
    @player = Player.new 
end 

в routes.rb вы должны иметь resources :players

@player - это переменная экземпляра, чтобы вы могли также назвать ее в представлении.

См. Rails Guide, чтобы создать ваше первое приложение.

Также проверьте Rails for Zombies они очень хорошо

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