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

توفر واجهة Cloud Functions واجهة تفاعلية لاستدعاء الوظائف مع بيانات الاختبار. تدعم الصدفة جميع أنواع المشغلات.

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

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

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

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

  1. افتح جزء حسابات الخدمة في وحدة تحكم Google Cloud.
  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) .

خدمة الوظائف باستخدام Cloud Functions Shell

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

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 Shell

لاستخدام هذه الميزة، يجب أن يكون 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}})

افتراضيًا، يقوم Shell بتشغيل وظائف قاعدة بيانات Realtime مع امتيازات المسؤول (حساب الخدمة). استخدم خيار 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'}})

استدعاء وظائف التحليلات

يمكنك استدعاء وظيفة 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);

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

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

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