เชลล์ Cloud Functions มีเชลล์แบบอินเทอร์แอกทีฟสําหรับเรียกใช้ฟังก์ชันด้วยข้อมูลทดสอบ เชลล์รองรับทริกเกอร์ทุกประเภท
ตั้งค่าข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ (ไม่บังคับ)
หากต้องการให้การทดสอบฟังก์ชันโต้ตอบกับ Google API หรือ Firebase API อื่นๆ ผ่าน Firebase Admin SDK คุณอาจต้องตั้งค่าข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ
- ทริกเกอร์ Cloud Firestore และ Realtime Database มีข้อมูลเข้าสู่ระบบเพียงพออยู่แล้ว และไม่จําเป็นต้องตั้งค่าเพิ่มเติม
- API อื่นๆ ทั้งหมด รวมถึง Firebase API เช่น Authentication และ FCM หรือ Google API เช่น Cloud Translation หรือ Cloud Speech ต้องใช้ขั้นตอนการตั้งค่าที่อธิบายในส่วนนี้ การดำเนินการนี้ใช้ได้ไม่ว่าคุณจะใช้เชลล์ Cloud Functions หรือ
firebase emulators:start
วิธีตั้งค่าข้อมูลเข้าสู่ระบบของผู้ดูแลระบบสำหรับฟังก์ชันที่จำลอง
- เปิดแผงบัญชีบริการของคอนโซล Google Cloud
- ตรวจสอบว่าได้เลือกApp Engine บัญชีบริการเริ่มต้น แล้วใช้เมนูตัวเลือกทางด้านขวาเพื่อเลือกสร้างคีย์
- เมื่อได้รับข้อความแจ้ง ให้เลือกประเภทคีย์เป็น JSON แล้วคลิกสร้าง
ตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นของ 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
หลังจากทําตามขั้นตอนเหล่านี้แล้ว การทดสอบฟังก์ชันจะเข้าถึง Firebase และ Google APIs ได้โดยใช้ Admin SDK เช่น เมื่อทดสอบทริกเกอร์ Authentication ฟังก์ชันจำลองอาจเรียกใช้ admin.auth().getUserByEmail(email)
แสดงฟังก์ชันโดยใช้เชลล์ Cloud Functions
เชลล์ Cloud Functions จะจำลองทริกเกอร์ฟังก์ชันทุกประเภทด้วยเชลล์แบบอินเทอร์แอกทีฟสำหรับการเรียกใช้ฟังก์ชันด้วยข้อมูลทดสอบ ตัวเลือกจะแตกต่างกันไปตามประเภทฟังก์ชัน แต่รูปแบบการใช้งานพื้นฐานคือ
myFunctionName(data, options)
ต้องใช้พารามิเตอร์ data
สำหรับทริกเกอร์ฐานข้อมูลเรียลไทม์, Cloud Firestore และ PubSub แต่จะใช้หรือไม่ใช้ก็ได้สำหรับฟังก์ชันประเภทอื่นๆ ทั้งหมด
นอกจากนี้ พารามิเตอร์ options
(ไม่บังคับ) จะใช้ได้กับฟังก์ชัน Realtime Database และ Cloud Firestore เท่านั้น
คุณโหลดข้อมูลทดสอบจากไฟล์ในเครื่องได้หากต้องการ โดยบันทึกไฟล์เป็นตัวแปรและเรียกใช้ฟังก์ชันด้วยไฟล์ดังกล่าว
var data = require('./path/to/testData.json');
myFunction(data);
ติดตั้งและกำหนดค่าเชลล์ Cloud Functions
หากต้องการใช้ฟีเจอร์นี้ firebase-tools
ต้องมีเวอร์ชันขั้นต่ำ 3.11.0 และ firebase-functions
SDK ต้องมีเวอร์ชันขั้นต่ำ 0.6.2 หากต้องการอัปเดตทั้ง 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
เป็นพารามิเตอร์ที่ 2 ได้ด้วย (ไม่บังคับ) ต้องเป็นสตริง
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
การจําลอง context.auth
ไม่พร้อมให้บริการในขณะนี้
เรียกใช้ฟังก์ชัน Realtime Database
เมื่อเรียกใช้ฟังก์ชัน Realtime Database ในเครื่อง คุณจะต้องระบุข้อมูลทดสอบที่เหมาะสม โดยทั่วไปแล้ว การดำเนินการนี้หมายถึงการให้ข้อมูลทดสอบใหม่สําหรับการดําเนินการ onCreate
, ข้อมูลเก่า/ที่นําออกสําหรับการดําเนินการ onDelete
และทั้ง 2 รายการสําหรับฟังก์ชัน 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
แล้ว Shell ยังมีตัวเลือก 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
และทั้ง 2 รายการสําหรับฟังก์ชัน 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
คุณสามารถเรียกใช้ฟังก์ชัน 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);
เรียกใช้ฟังก์ชันพื้นที่เก็บข้อมูลและการตรวจสอบสิทธิ์
สําหรับฟังก์ชันพื้นที่เก็บข้อมูลและการตรวจสอบสิทธิ์ ให้เรียกใช้ฟังก์ชันในเครื่องด้วยข้อมูลทดสอบที่คุณต้องการดูภายในฟังก์ชัน ข้อมูลทดสอบต้องอยู่ในรูปแบบข้อมูลต่อไปนี้
- สำหรับ Cloud Storage:
ObjectMetadata
- สำหรับ Authentication:
UserRecord
ระบุเฉพาะช่องที่โค้ดของคุณใช้ หรือไม่ต้องระบุเลยหากต้องการเรียกใช้ฟังก์ชันเท่านั้น