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

يوفر مفسّر Cloud Functions مفسّرًا تفاعليًا لاستدعاء الدوال باستخدام بيانات الاختبار. يتوافق المفسّر مع جميع أنواع المشغّلات.

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

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

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

لإعداد بيانات اعتماد المشرف للدوال المحاكاة، اتّبِع الخطوات التالية:

  1. افتح لوحة حسابات الخدمة في Google Cloud Console.
  2. تأكَّد من اختيار App Engine حساب الخدمة التلقائي ، واستخدِم قائمة الخيارات على يسار الشاشة لاختيار إنشاء مفتاح.
  3. عندما يُطلب منك ذلك، اختَر JSON لنوع المفتاح، وانقر على إنشاء.
  4. اضبط بيانات اعتماد 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
    

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

عرض الدوال باستخدام مفسّر Cloud Functions

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

myFunctionName(data, options)

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

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

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

تثبيت مفسّر 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

أخيرًا، شغِّل المفسّر باستخدام الأمر التالي:

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.

استدعاء دوال 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}})

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

حدِّد الحقول التي يعتمد عليها الرمز فقط، أو لا تحدِّد أي حقول إذا كنت تريد تشغيل الدالة فقط.