Ruby on rails 测试超控装置控制器–&引用;“没有路线匹配”;

Ruby on rails 测试超控装置控制器–&引用;“没有路线匹配”;,ruby-on-rails,devise,Ruby On Rails,Devise,我运行了rails g designe:controllers用户,我的路线看起来像 devise_for :users, controllers: { sessions: 'sessions' } 我有一个app/controllers/users/sessions\u controller要测试。我的路线如下: $ rake routes Prefix Verb URI Pattern Controller#Acti

我运行了
rails g designe:controllers用户
,我的路线看起来像

devise_for :users, controllers: {
  sessions: 'sessions'
}
我有一个
app/controllers/users/sessions\u controller
要测试。我的路线如下:

$ rake routes
              Prefix Verb   URI Pattern                    Controller#Action
    new_user_session GET    /users/sign_in(.:format)       sessions#new
        user_session POST   /users/sign_in(.:format)       sessions#create
我的测试设置如下:

# test/controllers/users/sessions_controller_test.rb
require 'test_helper'

class SessionsControllerTest < ActionController::TestCase
  tests Users::SessionsController

  test "sign in sanity check" do
    user = users(:one)
    post :create, email: user.email, password: 'password'
    assert_response :success
  end
end

如何正确地发布到所需的URL?我尝试了各种各样的变化,但我缺少了一些神奇的调味汁。

将您的路线更改为.rb

devise_for :users, controllers: {
  sessions: 'users/sessions'
}
在你的测试中,确保你有

class SessionsControllerTest < ActionController::TestCase
  tests Users::SessionsController
  include Devise::TestHelpers

  test "sign in sanity check" do
    request.env["devise.mapping"] = Devise.mappings[:user]
    user = users(:one)
    post :create, email: user.email, password: 'password'
    assert_response :success
  end
end
class SessionControllerTest
(你可以举个例子。)

class SessionsControllerTest < ActionController::TestCase
  tests Users::SessionsController
  include Devise::TestHelpers

  test "sign in sanity check" do
    request.env["devise.mapping"] = Devise.mappings[:user]
    user = users(:one)
    post :create, email: user.email, password: 'password'
    assert_response :success
  end
end