يوفر برنامج Cloud Functions النصي واجهة تفاعلية لتشغيل الدوال باستخدام بيانات الاختبار. يتوافق الغلاف مع جميع أنواع المشغّلات.
إعداد بيانات اعتماد المشرف (اختياري)
إذا كنت تريد أن تتفاعل اختبارات الدوال مع واجهات برمجة التطبيقات من Google أو واجهات برمجة التطبيقات الأخرى من Firebase من خلال Firebase Admin SDK، قد تحتاج إلى إعداد بيانات اعتماد المشرف.
- تتوفّر بيانات اعتماد كافية لمشغّلي Cloud Firestore وRealtime Database، ولا تتطلّب إعدادًا إضافيًا.
- تتطلّب جميع واجهات برمجة التطبيقات الأخرى، بما في ذلك واجهات برمجة تطبيقات Firebase، مثل Authentication وFCM، أو واجهات برمجة تطبيقات Google، مثل Cloud Translation أو Cloud Speech، خطوات الإعداد الموضّحة في هذا القسم. ينطبق ذلك سواء كنت تستخدم واجهة Cloud Functions أو
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 API باستخدام Admin SDK. على سبيل المثال، عند اختبار مشغّل Authentication، يمكن للدالة المحاكية استدعاء admin.auth().getUserByEmail(email)
.
عرض الدوال باستخدام واجهة Cloud Functions
يحاكي Cloud Functions shell جميع أنواع مشغّلات الدوال باستخدام واجهة تفاعلية لتنفيذ الدوال باستخدام بيانات اختبارية. تختلف الخيارات حسب نوع الدالة، ولكن يكون تنسيق الاستخدام الأساسي كما يلي:
myFunctionName(data, options)
المَعلمة data
مطلوبة لمشغّلات Realtime Database وCloud Firestore وPubSub، وهي اختيارية لجميع أنواع الدوال الأخرى.
بالإضافة إلى ذلك، تكون المَعلمة الاختيارية options
صالحة فقط لوظائف Realtime Database و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 في shell، يكون الاستخدام مماثلاً لوحدة 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 Callable محليًا، عليك تقديم بيانات اختبار مناسبة.
# 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
عند تشغيل دوال 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
، يوفّر الغلاف الخيار params
لاستخدامه في محاكاة أحرف البدل في مسار:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
بشكلٍ تلقائي، تنفِّذ الصدفة وظائف Realtime Database باستخدام امتيازات المشرف (حساب الخدمة). استخدِم الخيار 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 وAuth، استدعِ الدالة المحلية باستخدام بيانات الاختبار التي تريد عرضها داخل الدالة. يجب أن تتّبع بيانات الاختبار تنسيقات البيانات التالية:
- بالنسبة إلى Cloud Storage:
ObjectMetadata
- بالنسبة إلى Authentication:
UserRecord
حدِّد الحقول التي يعتمد عليها الرمز فقط، أو لا تحدِّد أي حقول إذا كنت تريد تشغيل الدالة فقط.