【问题标题】:test devise_token_auth: Could not find devise mapping for path "/api/v1/auth"测试 devise_token_auth:找不到路径“/api/v1/auth”的设计映射
【发布时间】:2016-08-28 11:26:18
【问题描述】:

我正在尝试测试创建用户。这里是

registrations_controller_spec.rb

require 'rails_helper'

RSpec.describe DeviseTokenAuth::RegistrationsController, type: :controller do
  before :each do
    post :create, params:{email:"w@123.com",password:"123123",password_confirmation:"123123"}
    @data = JSON.parse(response.body)
  end

  describe "Register a user" do
    it "request should be successful" do
      expect(response).to have_http_status(200)
    end
  end

end

当我运行测试时,我得到了:

Failures:

  1) DeviseTokenAuth::RegistrationsController Register a user request should be successful
     Failure/Error: post :create, params:{email:"w@123.com",password:"123123",password_confirmation:"123123"}

     AbstractController::ActionNotFound:
       Could not find devise mapping for path "/api/v1/auth".
       This may happen for two reasons:

       1) You forgot to wrap your route inside the scope block. For example:

         devise_scope :user do
           get "/some/route" => "some_devise_controller"
         end

       2) You are testing a Devise controller bypassing the router.
          If so, you can explicitly tell Devise which mapping to use:

          @request.env["devise.mapping"] = Devise.mappings[:user]
     # ./spec/controllers/devise_token_auth/registrations_controller_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.01477 seconds (files took 1.76 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/controllers/devise_token_auth/registrations_controller_spec.rb:10 # DeviseTokenAuth::RegistrationsController Register a user request should be successful

消息提供两种方式: 1)我尝试将第一个添加到路线中但不起作用,我应该在哪里或如何添加它。 2)我在块前添加了@request.env["devise.mapping"] = Devise.mappings[:user],但不起作用。

我应该如何解决这个问题?谢谢!

这是我的 routes.rb

Rails.application.routes.draw do

  namespace :api do
    scope :v1 do
      mount_devise_token_auth_for 'User', at: 'auth'
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails authentication devise token


    【解决方案1】:

    检查控制台:Devise.mappings,这会给你一个提示。

    就我而言,我不得不打电话

    request.env['devise.mapping'] = Devise.mappings[:api_v1_user]

    而不是

    request.env["devise.mapping"] = Devise.mappings[:user]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多