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

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

ตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบ (ไม่บังคับ)

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

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

หลังจากทำตามขั้นตอนเหล่านี้แล้ว การทดสอบฟังก์ชันของคุณจะเข้าถึง 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 ต้องมีเวอร์ชันขั้นต่ำ 3.11.0 และ SDK firebase-functions ต้องมีเวอร์ชันขั้นต่ำ 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 Callable ในเครื่อง คุณจะต้องให้ข้อมูลการทดสอบที่เหมาะสม

# 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 ภายในเครื่อง คุณจะต้องให้ข้อมูลการทดสอบที่เหมาะสม โดยทั่วไปหมายถึงการจัดเตรียมข้อมูลการทดสอบใหม่สำหรับการดำเนินการ 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

คุณสามารถเรียกใช้ฟังก์ชัน 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);

เรียกใช้ฟังก์ชัน Storage และ Auth

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

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

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