يوفر غلاف وظائف السحابة غلافًا تفاعليًا لاستدعاء الوظائف مع بيانات الاختبار. يدعم الغلاف جميع أنواع الزناد.
إعداد بيانات اعتماد المسؤول (اختياري)
إذا كنت تريد أن تتفاعل اختبارات الوظائف مع Google APIs أو واجهات Firebase API الأخرى عبر Firebase Admin SDK ، فقد تحتاج إلى إعداد بيانات اعتماد المشرف.
- تمتلك مشغلات Cloud Firestore و Realtime Database بالفعل بيانات اعتماد كافية ، ولا تتطلب إعدادًا إضافيًا.
- تتطلب جميع واجهات برمجة التطبيقات الأخرى ، بما في ذلك واجهات Firebase API مثل المصادقة و FCM أو واجهات برمجة تطبيقات Google مثل Cloud Translation أو Cloud Speech ، خطوات الإعداد الموضحة في هذا القسم. ينطبق هذا سواء كنت تستخدم واجهة Cloud Functions أو
firebase emulators:start
.
لإعداد بيانات اعتماد المسؤول للوظائف التي تمت مضاهاتها:
- افتح جزء حسابات الخدمة في Google Cloud Console.
- تأكد من تحديد حساب خدمة App Engine الافتراضي ، واستخدم قائمة الخيارات الموجودة على اليمين لتحديد إنشاء مفتاح .
- عند المطالبة ، حدد JSON لنوع المفتاح ، وانقر فوق إنشاء .
قم بتعيين بيانات اعتماد Google الافتراضية للإشارة إلى المفتاح الذي تم تنزيله:
يونكس
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 باستخدام Admin SDK . على سبيل المثال ، عند اختبار مشغل المصادقة ، يمكن للوظيفة التي تمت مضاهاتها استدعاء admin.auth().getUserByEmail(email)
.
خدمة الوظائف باستخدام غلاف وظائف السحابة
يحاكي غلاف وظائف السحابة جميع أنواع مشغلات الوظائف مع غلاف تفاعلي لاستدعاء الوظائف ببيانات الاختبار. تختلف الخيارات حسب نوع الوظيفة ، لكن تنسيق الاستخدام الأساسي هو:
myFunctionName(data, options)
معلمة data
مطلوبة لمشغلات Realtime Database و Cloud Firestore و PubSub ، وهي اختيارية لجميع أنواع الوظائف الأخرى. أيضًا ، معلمة options
الاختيارية صالحة فقط لوظائف Realtime Database و Cloud Firestore.
اختياريًا ، يمكنك تحميل بيانات الاختبار من ملف محلي عن طريق حفظ الملف كمتغير واستدعاء دالة معه:
var data = require('./path/to/testData.json');
myFunction(data);
قم بتثبيت وتكوين غلاف وظائف السحابة
لاستخدام هذه الميزة ، يجب أن يكون لدى 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
أخيرًا ، قم بتشغيل 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 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}})
بشكل افتراضي ، يقوم shell بتشغيل وظائف 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}})
تقوم shell دائمًا بتشغيل وظائف 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'}})
استدعاء وظائف التحليلات
يمكنك استدعاء وظيفة Analytics بدون أي بيانات عن طريق تشغيل 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);
استدعاء وظائف التخزين والمصادقة
بالنسبة لوظائف التخزين والمصادقة ، قم باستدعاء الوظيفة المحلية ببيانات الاختبار التي ترغب في رؤيتها داخل الوظيفة. يجب أن تتبع بيانات الاختبار الخاصة بك تنسيقات البيانات المقابلة:
- للتخزين السحابي:
ObjectMetadata
- للمصادقة:
UserRecord
حدد الحقول التي تعتمد عليها التعليمات البرمجية فقط ، أو لا تحدد الحقول على الإطلاق إذا كنت تريد تشغيل الوظيفة فقط.