تست توابع به صورت تعاملی

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

تنظیم اعتبار مدیریت (اختیاری)

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

  • راه‌اندازهای Cloud Firestore و Realtime Database از قبل دارای اعتبار کافی هستند و نیازی به تنظیمات اضافی ندارند.
  • همه APIهای دیگر، از جمله APIهای Firebase مانند Authentication و FCM یا APIهای Google مانند Cloud Translation یا Cloud Speech، به مراحل راه‌اندازی توضیح داده شده در این بخش نیاز دارند. چه از پوسته توابع Cloud یا 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
    

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

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

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

myFunctionName(data, options)

پارامتر data برای راه‌اندازهای Realtime Database، Cloud Firestore و PubSub و برای همه انواع عملکردهای دیگر اختیاری است. همچنین، پارامتر options اختیاری فقط برای توابع پایگاه داده Realtime و 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 در پوسته، استفاده از ماژول NPM request یکسان است، اما 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 به صورت محلی، باید داده های آزمایشی مناسب را ارائه دهید. این به طور کلی به معنای ارائه داده های آزمایشی جدید برای عملیات 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'}})

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

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

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

توابع Storage و Auth را فراخوانی کنید

برای توابع Storage و Auth، تابع محلی را با داده های آزمایشی که می خواهید در داخل تابع ببینید، فراخوانی کنید. داده های آزمایشی شما باید از فرمت های داده مربوطه پیروی کنند:

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