توفّر بيئة سطر الأوامر في Cloud Functions بيئة سطر أوامر تفاعلية لاستدعاء الدوالّ باستخدام بيانات اختبارية. تتيح القشرة جميع أنواع المشغّلات.
إعداد بيانات اعتماد المشرف (اختياري)
إذا كنت تريد أن تتفاعل اختبارات الدوالّ مع واجهات برمجة تطبيقات Google أو غيرها من واجهات برمجة تطبيقات Firebase من خلال حزمة تطوير البرامج (SDK) الخاصة بمدير Firebase، قد تحتاج إلى إعداد بيانات اعتماد المشرف.
- تتوفّر لدى مشغّلَي التفعيل Cloud Firestore وRealtime Database بيانات اعتماد كافية، ولا يتطلّبان إعدادًا إضافيًا.
- تتطلّب جميع واجهات برمجة التطبيقات الأخرى، بما في ذلك واجهات برمجة تطبيقات Firebase، مثل Authentication وFCM أو واجهات برمجة تطبيقات Google، مثل Cloud Translation أو Cloud Speech، خطوات الإعداد الموضّحة في هذا القسم. ينطبق ذلك سواء كنت تستخدم Cloud Functions shell أو
firebase emulators:start
.
لإعداد بيانات اعتماد المشرف للدوالّ المحاكية:
- افتح لوحة حسابات الخدمة في وحدة تحكّم Google Cloud.
- تأكَّد من اختيار App Engine حساب الخدمة التلقائي، واستخدِم قائمة الخيارات على يسار الصفحة لاختيار إنشاء مفتاح.
- اختَر JSON لنوع المفتاح، وانقر على إنشاء عندما يُطلب منك ذلك.
اضبط بيانات الاعتماد التلقائية في 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 Shell
تحاكي بيئة Cloud Functions جميع أنواع مثبّتَي بدء الدوال باستخدام بيئة تفاعلية لتشغيل الدوال باستخدام بيانات اختبارية. تختلف الخيارات تبعًا لنوع الدالة، ولكن تنسيق الاستخدام الأساسي هو:
myFunctionName(data, options)
تكون المَعلمة data
مطلوبة لـ Realtime Database وCloud Firestore
وعوامل تشغيل PubSub، واختيارية لجميع أنواع الدوالّ الأخرى.
بالإضافة إلى ذلك، لا تكون المَعلمة الاختيارية options
صالحة إلا لدوالّ قاعدة بيانات Realtime
وCloud Firestore.
يمكنك اختياريًا تحميل بيانات اختبار من ملف متوفر على الجهاز من خلال حفظ الملف كمتغيّر واستخدامه مع دالة:
var data = require('./path/to/testData.json');
myFunction(data);
تثبيت Shell في Cloud Functions وضبطه
لاستخدام هذه الميزة، يجب أن يكون الإصدار firebase-tools
على الأقل 3.11.0، ويجب أن يكون الإصدار firebase-functions
SDK على الأقل 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
أخيرًا، شغِّل shell باستخدام الأمر التالي:
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
حاليًا.
استدعاء دوال "قاعدة بيانات الوقت الفعلي"
عند تشغيل دوالّ "قاعدة بيانات في الوقت الفعلي" محليًا، عليك تقديم
بيانات اختبارية مناسبة. يعني ذلك بشكل عام توفير بيانات اختبار جديدة لعمليات
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()
في shell.
لتشغيل الدالة باستخدام بيانات اختبارية، ننصحك بتحديد متغيّر لتحديد
حقول بيانات الحدث المحدّدة التي تحتاجها الدالة:
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، يمكنك استدعاء الدالة المحلية باستخدام بيانات الاختبار التي تريد عرضها داخل الدالة. يجب أن تتوافق بيانات الاختبار مع تنسيقات البيانات المقابلة لها:
- بالنسبة إلى Cloud Storage:
ObjectMetadata
- بالنسبة إلى Authentication:
UserRecord
حدِّد فقط الحقول التي تعتمد عليها رمزك البرمجي، أو لا تحدِّد أيّ حقول على الإطلاق إذا كنت تريد فقط تشغيل الدالة.