ทดสอบฟังก์ชันแบบอินเทอร์แอกทีฟ

Shell Cloud Functions มี Shell แบบอินเทอร์แอกทีฟสำหรับการเรียกใช้ฟังก์ชันที่มีข้อมูลทดสอบ Shell รองรับทริกเกอร์ทุกประเภท

ตั้งค่าข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ (ไม่บังคับ)

หากต้องการให้การทดสอบฟังก์ชันโต้ตอบกับ Google APIs หรือ Firebase API อื่นๆ ผ่าน Firebase Admin SDK คุณอาจต้องกำหนดข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ

  • ทริกเกอร์ Cloud Firestore และ Realtime Database มีข้อมูลเข้าสู่ระบบเพียงพออยู่แล้ว และไม่ต้องมีการตั้งค่าเพิ่มเติม
  • API อื่นๆ ทั้งหมด รวมถึง Firebase API เช่น Authentication และ FCM หรือ Google APIs เช่น Cloud Translation หรือ Cloud Speech ต้องมีขั้นตอนการตั้งค่าตามที่อธิบายไว้ในส่วนนี้ ซึ่งจะมีผลไม่ว่าคุณจะใช้ Shell ของ 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
    

    Windows

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

หลังจากทำตามขั้นตอนเหล่านี้แล้ว การทดสอบฟังก์ชันจะเข้าถึง Firebase และ API ของ Google ได้โดยใช้ Admin SDK ตัวอย่างเช่น เมื่อทดสอบทริกเกอร์การตรวจสอบสิทธิ์ ฟังก์ชันที่จำลองอาจเรียกใช้ admin.auth().getUserByEmail(email)

แสดงฟังก์ชันโดยใช้ Shell ฟังก์ชันระบบคลาวด์

เชลล์ Cloud Functions จะจำลองทริกเกอร์ฟังก์ชันทุกประเภทด้วย Shell แบบอินเทอร์แอกทีฟสำหรับเรียกใช้ฟังก์ชันที่มีข้อมูลทดสอบ ตัวเลือกจะแตกต่างกันไปตามประเภทของฟังก์ชัน แต่รูปแบบการใช้งานพื้นฐานมีดังนี้

myFunctionName(data, options)

ต้องระบุพารามิเตอร์ data สำหรับทริกเกอร์ Realtime Database, Cloud Firestore และ PubSub โดยจะไม่บังคับสำหรับฟังก์ชันประเภทอื่นๆ ทั้งหมด นอกจากนี้ พารามิเตอร์ options ที่ไม่บังคับใช้ได้เฉพาะกับฟังก์ชัน Realtime Database และ Cloud Firestore

นอกจากนี้ คุณยังโหลดข้อมูลทดสอบจากไฟล์ในเครื่องได้โดยการบันทึกไฟล์เป็นตัวแปรและเรียกใช้ฟังก์ชันด้วยคำสั่งต่อไปนี้

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

ติดตั้งและกำหนดค่า Shell Cloud Functions

หากต้องการใช้ฟีเจอร์นี้ firebase-tools ต้องมีเวอร์ชัน 3.11.0 ขึ้นไปและ SDK ของ firebase-functions ต้องมีเวอร์ชัน 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

สุดท้าย ให้เรียกใช้ Shell ด้วยคำสั่งต่อไปนี้

firebase functions:shell

เรียกใช้ฟังก์ชัน HTTPS

สำหรับการเรียกใช้ฟังก์ชัน HTTPS ใน Shell การใช้งานจะเหมือนกับโมดูล 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() ใน Shell หากต้องการเรียกใช้ฟังก์ชันกับข้อมูลทดสอบ ขอแนะนำให้กำหนดตัวแปรสำหรับช่องข้อมูลเหตุการณ์ที่เฉพาะเจาะจงที่ฟังก์ชันต้องการ ดังนี้

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
  • สำหรับการตรวจสอบสิทธิ์: UserRecord

ระบุเฉพาะฟิลด์ที่โค้ดของคุณต้องอ้างอิง หรือไม่ต้องระบุเลยหากต้องการเรียกใช้ฟังก์ชันเท่านั้น