2015-11-05 31 views
0

嘿家伙任何人都可以找到我哪里出错了?我创建了一个API端点,预计将从另一个网站使用参数调用。从这些参数我打算在我的应用程序中找到用户并更新该用户的属性。这是我的控制器的样子:Rspec得到请求没有击中控制器(401未经授权的错误)

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应该找到与用户相应的手机号码并将他们的“监护人验证”属性更改为“false”。但是,当我运行规格时,它会在测试日志中引发此错误:

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) 

但是,该功能本身能正常工作,但该规范不适用。任何人都知道为什么?

回答

0

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

实施例:

request.headers["Authorization"] = "..." 
request.headers["X-Api-Key"] = "..." 
request.headers["Content-Type"] = "..." 
相关问题