Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

ฟังก์ชั่นการทดสอบแบบโต้ตอบ

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

เชลล์ 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

ในการตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบสำหรับฟังก์ชันที่จำลอง:

  1. เปิด บานหน้าต่างบัญชีบริการ ของ Google Cloud Console
  2. ตรวจสอบให้แน่ใจว่าได้เลือก บัญชีบริการเริ่มต้นของ App Engine แล้ว และใช้เมนูตัวเลือกที่ด้านขวาเพื่อเลือก สร้างคีย์
  3. เมื่อได้รับแจ้ง ให้เลือก JSON สำหรับประเภทคีย์ แล้วคลิก Create
  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 และ Google API ได้โดยใช้ Admin SDK ตัวอย่างเช่น เมื่อทำการทดสอบทริกเกอร์การตรวจสอบสิทธิ์ ฟังก์ชันจำลองอาจเรียก admin.auth().getUserByEmail(email)

ให้บริการฟังก์ชันโดยใช้เชลล์ Cloud Functions

เชลล์ 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

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

เมื่อเรียกใช้ฟังก์ชัน HTTPS Callable ในเครื่อง คุณจะต้องให้ข้อมูลการทดสอบที่เหมาะสม

# 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 .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}})

ตามค่าเริ่มต้น เชลล์จะเรียกใช้ฟังก์ชันฐานข้อมูลเรียลไทม์ด้วยสิทธิ์ของผู้ดูแลระบบ (บัญชีบริการ) ใช้ 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 object คุณสามารถใช้ฟิลด์ 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:'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 ให้เรียกใช้ฟังก์ชันในเครื่องด้วยข้อมูลทดสอบที่คุณต้องการดูภายในฟังก์ชัน ข้อมูลการทดสอบของคุณต้องเป็นไปตามรูปแบบข้อมูลที่เกี่ยวข้อง:

  • สำหรับที่เก็บข้อมูลบนคลาวด์: ObjectMetadata
  • สำหรับการตรวจสอบ: UserRecord

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