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

يوفر غلاف وظائف السحابة غلافًا تفاعليًا لاستدعاء الوظائف مع بيانات الاختبار. يدعم الغلاف جميع أنواع الزناد.

إعداد بيانات اعتماد المسؤول (اختياري)

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

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

لإعداد بيانات اعتماد المسؤول للوظائف التي تمت مضاهاتها:

  1. افتح جزء حسابات الخدمة في Google Cloud Console.
  2. تأكد من تحديد حساب خدمة App Engine الافتراضي ، واستخدم قائمة الخيارات الموجودة على اليمين لتحديد إنشاء مفتاح .
  3. عند المطالبة ، حدد JSON لنوع المفتاح ، وانقر فوق إنشاء .
  4. قم بتعيين بيانات اعتماد 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 Firebase الإصدار 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:'bar'},
    // 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);

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

بالنسبة لوظائف التخزين والمصادقة ، قم باستدعاء الوظيفة المحلية ببيانات الاختبار التي ترغب في رؤيتها داخل الوظيفة. يجب أن تتبع بيانات الاختبار الخاصة بك تنسيقات البيانات المقابلة:

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