اختبار الدوال بشكل تفاعلي

توفّر واجهة Cloud Functions shell واجهة تفاعلية لاستدعاء الدوال باستخدام بيانات الاختبار. يتيح Shell استخدام جميع أنواع المشغّلات.

إعداد بيانات اعتماد المشرف (اختياري)

إذا أردت أن تتفاعل اختبارات الدوال مع Google APIs أو Firebase APIs الأخرى من خلال مدير SDK في Firebase، قد تحتاج إلى إعداد بيانات اعتماد المشرف.

  • يحتوي المشغّلان Cloud Firestore وRealtime Database على بيانات اعتماد كافية، ولا يتطلّبان إعدادًا إضافيًا.
  • تتطلّب جميع واجهات برمجة التطبيقات الأخرى، بما في ذلك واجهات برمجة تطبيقات Firebase، مثل Authentication وFCM، أو واجهات Google APIs، مثل Cloud Translation أو Cloud Speech، خطوات الإعداد الموضّحة في هذا القسم. ينطبق ذلك سواء كنت تستخدم واجهة Cloud Functions أو firebase emulators:start.

لإعداد بيانات اعتماد المشرف للدوال التي تمت محاكاتها:

  1. افتح لوحة حسابات الخدمة في وحدة تحكّم Google Cloud.
  2. تأكَّد من اختيار حساب الخدمة التلقائي في App Engine، واستخدِم قائمة الخيارات على يسار الصفحة لاختيار إنشاء مفتاح.
  3. عندما يُطلب منك ذلك، اختَر JSON لنوع المفتاح، ثم انقر على إنشاء.
  4. اضبط بيانات الاعتماد التلقائية في Google لتوجيهها إلى المفتاح الذي تم تنزيله:

    نظام التشغيل Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

بعد إكمال هذه الخطوات، يمكن لاختبارات الدوال الوصول إلى Firebase و Google APIs باستخدام مدير SDK. على سبيل المثال، عند اختبار مُشغِّل Authentication، يمكن للدالة التي تمت محاكاتها استدعاء admin.auth().getUserByEmail(email).

عرض الدوال باستخدام واجهة Cloud Functions

تحاكي واجهة Cloud Functions جميع أنواع مشغّلات الدوال باستخدام واجهة تفاعلية لاستدعاء الدوال باستخدام بيانات الاختبار. تختلف الخيارات حسب نوع الدالة، ولكن تنسيق الاستخدام الأساسي هو:

myFunctionName(data, options)

تكون المَعلمة data مطلوبة لمشغّلات قاعدة بيانات الوقت الفعلي وCloud Firestore وPubSub، واختيارية لجميع أنواع الدوال الأخرى. بالإضافة إلى ذلك، تكون المَعلمة الاختيارية options صالحة فقط لدوال قاعدة بيانات الوقت الفعلي وCloud Firestore.

يمكنك اختياريًا تحميل بيانات الاختبار من ملف محلي عن طريق حفظ الملف كمتغير واستدعاء دالة به:

var data = require('./path/to/testData.json');
myFunction(data);

تثبيت واجهة Cloud Functions وضبطها

لاستخدام هذه الميزة، يجب أن يكون الحد الأدنى لإصدار firebase-tools هو 3.11.0، والحد الأدنى لإصدار حزمة تطوير البرامج (SDK) لـ firebase-functions هو 0.6.2. لتحديث كليهما، نفِّذ الأوامر التالية في دليل functions/ لمشروعك:

npm install --save firebase-functions@latest
npm install -g firebase-tools

إذا كنت تستخدم متغيّرات إعداد الدوال المخصّصة، شغِّل أولاً الأمر للحصول على الإعدادات المخصّصة (شغِّل هذا الأمر ضمن دليل functions) في بيئتك المحلية:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

أخيرًا، شغِّل واجهة الأوامر باستخدام الأمر التالي:

firebase functions:shell

استدعاء دوال HTTPS

لاستدعاء دوال HTTPS في واجهة الأوامر، يكون الاستخدام مماثلاً لوحدة request في NPM، ولكن يجب استبدال request باسم الدالة التي تريد محاكاتها. على سبيل المثال:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

استدعاء دوال HTTPS القابلة للاستدعاء

عند استدعاء دوال HTTPS القابلة للاستدعاء محليًا، ستحتاج إلى تقديم بيانات اختبار مناسبة.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

يمكنك اختياريًا تمرير Firebase-Instance-ID-token كمعلمة ثانية. يجب أن تكون هذه القيمة سلسلة.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

لا تتوفّر حاليًا محاكاة context.auth.

استدعاء دوال Realtime Database

عند تشغيل دوالّ قاعدة بيانات الوقت الفعلي محليًا، عليك تقديم بيانات اختبار مناسبة. يعني هذا بشكل عام توفير بيانات اختبار جديدة لعمليات onCreate، وبيانات قديمة/تمت إزالتها لعمليات onDelete، وكلاهما لدوال onUpdate أو onWrite:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

بالإضافة إلى خيارات before/after، يوفّر shell الخيار params لاستخدامه في محاكاة أحرف البدل في مسار:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

By default, the shell runs Realtime Database functions with admin (service account) privileges. استخدِم الخيار auth لتشغيل الدوال كمستخدم نهائي معيّن أو كمستخدم لم تتم مصادقته:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

استدعاء دوال Firestore

عند تشغيل دوال Firestore محليًا، عليك تقديم بيانات اختبار مناسبة. يعني هذا بشكل عام تقديم بيانات اختبار جديدة لعمليات onCreate، وبيانات قديمة أو تمت إزالتها لعمليات onDelete، وكلاهما لدوال onUpdate أو onWrite. يُرجى العِلم أنّ بيانات Firestore يجب أن تكون أزواج مفاتيح وقيم، راجِع أنواع البيانات المتوافقة.

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

بالإضافة إلى حقول before/after في عنصر data، يمكنك استخدام حقول params في عنصر options لمحاكاة أحرف البدل في اسم المستند:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

تنفّذ واجهة الأوامر دائمًا دوال Firestore بامتيازات المشرف، ما يعني أنّها تحاكي حدث إنشاء/تعديل/حذف كما لو تم تنفيذه من قِبل مستخدم إداري.

استدعاء دوال PubSub

بالنسبة إلى دوال PubSub، أدخِل حمولة الرسالة في مثيل Buffer وأضِف سمات البيانات اختياريًا كما هو موضّح:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

استدعاء دوال "إحصاءات Google"

يمكنك استدعاء دالة في "إحصاءات Google" بدون أي بيانات من خلال تشغيل myAnalyticsFunction() في واجهة الأوامر. لتشغيل الدالة باستخدام بيانات الاختبار، يُنصح بتحديد متغير لحقول بيانات الأحداث المحددة التي تحتاجها الدالة:

var data = {
  eventDim: [{
    // populates event.data.params
    params: {foo: {stringValue: 'bar'} },
    // Also valid:
    //   {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

استدعاء دوال Storage وAuth

بالنسبة إلى دوال Storage والمصادقة، يمكنك استدعاء الدالة المحلية باستخدام بيانات الاختبار التي تريد الاطّلاع عليها داخل الدالة. يجب أن تتبع بيانات الاختبار تنسيقات البيانات المقابلة:

حدِّد فقط الحقول التي يعتمد عليها الرمز البرمجي، أو لا تحدِّد أي حقول على الإطلاق إذا كنت تريد تشغيل الدالة فقط.