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

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

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

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

  • تتضمن مشغلات Cloud Firestore وقاعدة بيانات الوقت الفعلي بالفعل بيانات اعتماد كافية، ولا تتطلب إعدادًا إضافيًا.
  • أمّا جميع واجهات برمجة التطبيقات الأخرى، بما في ذلك واجهات برمجة تطبيقات Firebase، مثل المصادقة و"المراسلة عبر السحابة الإلكترونية من Firebase" أو Google APIs، مثل "ترجمة Cloud" أو "الكلام عبر السحابة الإلكترونية"، فتتطلب خطوات الإعداد الموضَّحة في هذا القسم. وينطبق هذا سواء كنت تستخدم واجهة أوامر السحابة الإلكترونية أو 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
    

    شبابيك

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

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

عرض الدوال باستخدام واجهة أوامر السحابة الإلكترونية

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

myFunctionName(data, options)

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

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

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

تثبيت وهيكل دوال Cloud

لاستخدام هذه الميزة، يجب أن يتوفّر لدى "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 في واجهة الأوامر، يكون الاستخدام مماثلاً لاستخدام وحدة NPM request، ولكن استبدِل 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 غير متاحة حاليًا.

استدعاء دوال قاعدة بيانات الوقت الفعلي

عند تشغيل دوال قاعدة بيانات الوقت الفعلي محليًا، ستحتاج إلى توفير بيانات اختبار مناسبة. ويعني ذلك بشكل عام توفير بيانات اختبار جديدة لعمليات 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، توفّر واجهة الأوامر خيار params للاستخدام في محاكاة أحرف البدل في المسار:

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

تشغِّل واجهة الأوامر تلقائيًا وظائف قاعدة بيانات الوقت الفعلي باستخدام امتيازات المشرف (حساب الخدمة). استخدِم الخيار 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);

استدعاء وظيفتَي التخزين والمصادقة

بالنسبة إلى وظيفتَي التخزين والمصادقة، استدعِ الدالة المحلية ببيانات الاختبار التي تريد رؤيتها داخل الدالة. يجب أن تتّبع بيانات الاختبار تنسيقات البيانات المناسبة:

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