آزمایش تعاملی کارکردها

پوسته Cloud Functions پوسته تعاملی‌ای برای فراخوانی توابع با داده‌های آزمایشی ارائه می‌دهد. پوسته از همه انواع راه‌انداز پشتیبانی می‌کند.

راه‌اندازی اطلاعات اعتباری سرپرست (اختیاری)

اگر می‌خواهید آزمایش‌های توابع شما ازطریق کیت توسعه نرم‌افزار Firebase Admin با Google API یا دیگر Firebase API تعامل داشته باشند، ممکن است لازم باشد اعتبارنامه‌های سرپرست را راه‌اندازی کنید.

  • راه‌اندازهای Cloud Firestore و Realtime Database ازقبل اعتبارنامه کافی دارند و به راه‌اندازی اضافی نیاز ندارند.
  • همه میاناهای برنامه‌سازی کاربردی دیگر، ازجمله میاناهای برنامه‌سازی کاربردی Firebase مانند Authentication و FCM یا میاناهای برنامه‌سازی کاربردی Google مانند Cloud Translation یا Cloud Speech، به مراحل راه‌اندازی شرح‌داده‌شده در این بخش نیاز دارند. این موضوع هم برای پوسته Cloud Functions و هم برای firebase emulators:start صدق می‌کند.

برای راه‌اندازی اطلاعات کاربری سرپرست برای عملکردهای شبیه‌سازی‌شده:

  1. قاب «حساب‌های سرویس» کنسول Google Cloud را باز کنید.
  2. مطمئن شوید حساب سرویس پیش‌فرض App Engine انتخاب شده باشد و از منوِ گزینه‌ها در سمت چپ برای انتخاب ایجاد کلید استفاده کنید.
  3. وقتی از شما خواسته شد، JSON را برای نوع کلید انتخاب کنید و روی ایجاد کلیک کنید.
  4. اعتبارنامه‌های پیش‌فرض Google را طوری تنظیم کنید که به کلید بارگیری‌شده اشاره کنند:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    پنجره

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

پس‌از تکمیل این مراحل، آزمایش‌های توابع شما می‌توانند بااستفاده از Admin SDK به Firebase و Google API دسترسی پیدا کنند. برای مثال، هنگام آزمایش راه‌انداز Authentication، تابع شبیه‌سازی‌شده می‌تواند admin.auth().getUserByEmail(email) را فراخوانی کند.

ارائه توابع بااستفاده از پوسته Cloud Functions

پوسته Cloud Functions همه انواع راه‌اندازهای تابع را با پوسته تعاملی برای فراخوانی توابع با داده‌های آزمایشی شبیه‌سازی می‌کند. گزینه‌ها براساس نوع تابع متفاوت است، اما قالب استفاده اصلی به‌صورت زیر است:

myFunctionName(data, options)

پارامتر data برای راه‌اندازهای Realtime Database،‏ Cloud Firestore، و PubSub الزامی است و برای همه انواع دیگر تابع اختیاری است. همچنین، پارامتر اختیاری options فقط برای توابع «پایگاه داده بی‌درنگ» و Cloud Firestore معتبر است.

درصورت تمایل، می‌توانید داده‌های آزمایشی را از فایل محلی بار کنید. برای این کار، فایل را به‌عنوان متغیر ذخیره کنید و تابع را با آن فراخوانی کنید:

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

نصب و پیکربندی کردن پوسته Cloud Functions

برای استفاده از این ویژگی، firebase-tools باید حداقل نسخه ۳.۱۱.۰ را داشته باشد، و کیت توسعه نرم‌افزار firebase-functions باید حداقل نسخه ۰.۶.۲ را داشته باشد. برای به‌روزرسانی هر دو، فرمان‌های زیر را در فهرست راهنمای 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

هنگام اجرای توابع 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'}})

فراخوانی توابع Analytics

می‌توانید با اجرای myAnalyticsFunction() در پوسته، تابع Analytics را بدون هیچ داده‌ای فراخوانی کنید. برای اجرای تابع با داده‌های آزمایشی، توصیه می‌شود متغیری برای فیلدهای داده رویداد خاصی که تابع شما نیاز دارد تعریف کنید:

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);

فراخوانی توابع «فضای ذخیره‌سازی» و «احراز هویت»

برای توابع «فضای ذخیره‌سازی» و «احراز هویت»، تابع محلی را با داده‌های آزمایشی که می‌خواهید در تابع ببینید فراخوانی کنید. داده‌های آزمایشی شما باید از قالب‌های داده مربوطه پیروی کند:

فقط فیلدهایی را مشخص کنید که کدتان به آن‌ها وابسته است، یا اگر فقط می‌خواهید تابع را اجرا کنید، هیچ فیلدی را مشخص نکنید.