【问题标题】:Rspec get request not hitting controller (401 Unauthorized error)Rspec 获取请求未命中控制器(401 未经授权的错误)
【发布时间】:2015-11-05 08:47:21
【问题描述】:

大家好,谁能找到我哪里出错了?我创建了一个 API 端点,期望从另一个网站使用参数调用。从这些参数中,我打算在我的应用程序中找到一个用户并更新该用户的属性。这是我的控制器的外观:

class Vodacom::Api::V1::SmsReceiverController < ApplicationController
  protect_from_forgery :except => [:suspend_account]

  def suspend_account
   logger.info "PARAMS: #{params.inspect}"
   @user = User.find_by(guardian_number: localize_number(vodacom_params[:num]), cell_number: vodacom_params[:mesg])
   begin
    @user.update(guardian_verified: false) if @user.older_than_18? == false
    render status: :ok, json: { message: "Account Deactivated" }
   rescue
     render status: :ok, json: { message: "Couldn't find user" }
    end
  end

 def localize_number(num)
  num = num.sub(/^../, '0')
 end

 private

 def vodacom_params
  params.permit(:num, :mesg, :prem, :tonum, :id)
 end
end

我的路线是这样的:

 namespace :vodacom do
    namespace :api do
      namespace :v1 do
        get "/suspend_account", to: "sms_receiver#suspend_account"
      end
    end
  end

我对此功能的规格如下所示:

require 'rails_helper'

RSpec.describe Vodacom::Api::V1::SmsReceiverController, :type => :controller do

  describe "When the correct parameters are sent to the SMS receiver controller" do
    let(:user){ create(:user, guardian_number: "0798900606", cell_number: "0798900606")}
    let(:params){ {prem: "30911", mesg: "0798900606", num: "27798900606", tonum: "082007005922721", id: "1122365"} }

    it "should receive a query string with attributes" do
      expect(suspend_user_account.request.env['QUERY_STRING']).to eq("id=1122365&mesg=0798900606&num=27798900606&prem=30911&tonum=082007005922721")
    end

    it "should find and disable the user's account " do
      get :suspend_account, params
      user.reload
      expect(user.guardian_verified).to eq(false)
    end

  end
end

Api 应该找到具有相应手机号码的用户,并将其“监护人验证”属性更改为“假”。但是,当我运行规范时,它会在测试日志中引发此错误:

Processing by Vodacom::Api::V1::SmsReceiverController#suspend_account as HTML
  Parameters: {"prem"=>"30911", "mesg"=>"0798900606", "num"=>"27798900606", "tonum"=>"082007005922721", "id"=>"1122365"}
Completed 401 Unauthorized in 6ms (ActiveRecord: 0.0ms)
  Rendered text template (0.0ms)

但是,功能本身可以工作,但规范不起作用。有人知道为什么吗?

【问题讨论】:

    标签: ruby-on-rails api rspec get endpoint


    【解决方案1】:

    在您发送请求之前,您必须将授权标头添加到请求中。

    例子:

     request.headers["Authorization"] = "..."
     request.headers["X-Api-Key"] = "..."
     request.headers["Content-Type"] = "..."
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多