سؤال

لدي الفئة البسيطة التالية وطريقة HTTParty:

class Token
  require 'httparty'

  include HTTParty
  base_uri 'https://<some url>'
  headers 'auth_user' => 'user'
  headers 'auth_pass' => 'password'
  headers 'auth_appkey' => 'app_key'

  def self.getToken
    response = get('/auth/token')
    @token = response['auth']['token']
  end
end

أعلم أنه يعمل لأنه يمكنني استدعاء الطريقة في وحدة تحكم Rails واستعادة الرمز المميز بنجاح.

كيف يمكنني اختبار الكود أعلاه في RSpec؟

طعنتي الأولية في ذلك لا تعمل:

describe Token do
  before do
    HTTParty.base_uri 'https://<some url>'
    HTTParty.headers 'auth_user' => 'user'
    HTTParty.headers 'auth_pass' => 'password'
    HTTParty.headers 'auth_appkey' => 'app_key'
  end

  it "gets a token" do
    HTTParty.get('auth/authenticate')
    response['auth']['token'].should_not be_nil
  end
end

انها تقول: NoMethodError: undefined method 'base_uri' for HTTParty:Module...

شكرًا!

هل كانت مفيدة؟

المحلول

نظرًا لأنك تختبر وحدة نمطية، فقد تجرب شيئًا مثل هذا:

describe Token do
   before do
      @a_class = Class.new do
         include HTTParty
         base_uri 'https://<some url>'
         headers 'auth_user' => 'user'
         headers 'auth_pass' => 'password'
         headers 'auth_appkey' => 'app_key'
      end
   end

   it "gets a token" do
      response = @a_class.get('auth/authenticate')
      response['auth']['token'].should_not be_nil
   end
end

يؤدي هذا إلى إنشاء فئة مجهولة وتوسيعها HTTPpartyأساليب الطبقة.ومع ذلك، لست متأكدًا من أن الرد سيعود كما هو.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top