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

Kiểm tra các chức năng một cách tương tác

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Vỏ Chức năng đám mây cung cấp một trình bao tương tác để gọi các chức năng với dữ liệu thử nghiệm. Vỏ hỗ trợ tất cả các loại kích hoạt.

Thiết lập thông tin đăng nhập quản trị viên (tùy chọn)

Nếu bạn muốn các bài kiểm tra chức năng của mình tương tác với Google API hoặc các API Firebase khác thông qua SDK quản trị Firebase , bạn có thể cần thiết lập thông tin đăng nhập quản trị viên.

  • Trình kích hoạt Cloud Firestore và Cơ sở dữ liệu thời gian thực đã có đủ thông tin đăng nhập và không yêu cầu thiết lập bổ sung.
  • Tất cả các API khác, bao gồm các API Firebase như Xác thực và FCM hoặc các API của Google như Dịch thuật đám mây hoặc Lời nói trên đám mây, đều yêu cầu các bước thiết lập được mô tả trong phần này. Điều này áp dụng cho dù bạn đang sử dụng trình bao hàm Cloud hay firebase emulators:start .

Để thiết lập thông tin đăng nhập quản trị viên cho các chức năng được mô phỏng:

  1. Mở ngăn Tài khoản dịch vụ của Google Cloud Console.
  2. Đảm bảo rằng tài khoản dịch vụ mặc định của App Engine được chọn và sử dụng menu tùy chọn ở bên phải để chọn Tạo khóa .
  3. Khi được nhắc, hãy chọn JSON cho loại khóa và nhấp vào Tạo .
  4. Đặt thông tin đăng nhập mặc định của Google của bạn để trỏ đến khóa đã tải xuống:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    các cửa sổ

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

Sau khi hoàn thành các bước này, các bài kiểm tra chức năng của bạn có thể truy cập vào các API của Firebase và Google bằng SDK quản trị. Ví dụ: khi kiểm tra trình kích hoạt Xác thực, hàm được mô phỏng có thể gọi admin.auth().getUserByEmail(email) .

Cung cấp các chức năng bằng cách sử dụng vỏ Chức năng đám mây

Lớp vỏ Chức năng đám mây mô phỏng tất cả các loại trình kích hoạt chức năng bằng một lớp vỏ tương tác để gọi các chức năng với dữ liệu thử nghiệm. Các tùy chọn khác nhau tùy theo loại chức năng, nhưng định dạng sử dụng cơ bản là:

myFunctionName(data, options)

Tham số data là bắt buộc đối với các trình kích hoạt Cơ sở dữ liệu thời gian thực, Cloud Firestore và PubSub và tùy chọn cho tất cả các loại chức năng khác. Ngoài ra, tham số options chỉ hợp lệ cho các chức năng Cơ sở dữ liệu thời gian thực và Cloud Firestore.

Theo tùy chọn, bạn có thể tải dữ liệu thử nghiệm từ một tệp cục bộ bằng cách lưu tệp dưới dạng một biến và gọi một hàm với nó:

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

Cài đặt và định cấu hình shell Chức năng đám mây

Để sử dụng tính năng này, firebase-tools phải có phiên bản tối thiểu 3.11.0 và SDK firebase-functions phải có phiên bản tối thiểu 0.6.2. Để cập nhật cả hai, hãy chạy các lệnh sau trong thư mục functions/ cho dự án của bạn:

npm install --save firebase-functions@latest
npm install -g firebase-tools

Nếu bạn đang sử dụng các biến cấu hình hàm tùy chỉnh, trước tiên hãy chạy lệnh để tải cấu hình tùy chỉnh của bạn (chạy lệnh này trong thư mục functions ) trong môi trường cục bộ của bạn:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Cuối cùng, chạy trình bao bằng lệnh sau:

firebase functions:shell

Gọi các chức năng HTTPS

Đối với việc gọi các hàm HTTPS trong shell, cách sử dụng giống như mô-đun NPM request , nhưng thay thế request bằng tên của hàm bạn muốn mô phỏng. Ví dụ:

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

Gọi các chức năng có thể gọi HTTPS

Khi gọi các chức năng HTTPS Callable cục bộ, bạn sẽ cần cung cấp dữ liệu thử nghiệm thích hợp.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

Theo tùy chọn, bạn có thể chuyển Firebase-Instance-ID-token làm thông số thứ hai. Đây phải là một chuỗi.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

Mô phỏng context.auth hiện không khả dụng.

Gọi các chức năng Cơ sở dữ liệu thời gian thực

Khi chạy cục bộ các chức năng Cơ sở dữ liệu thời gian thực, bạn sẽ cần cung cấp dữ liệu thử nghiệm thích hợp. Điều này thường có nghĩa là cung cấp dữ liệu thử nghiệm mới cho các hoạt động onCreate , dữ liệu cũ / đã loại bỏ cho các hoạt động onDelete và cả cho các hàm onUpdate hoặc 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' })

Ngoài các tùy chọn before/after , trình bao cung cấp params chọn tham số để sử dụng trong việc chế tạo các ký tự đại diện trong một đường dẫn:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

Theo mặc định, trình bao chạy các chức năng Cơ sở dữ liệu thời gian thực với các đặc quyền của quản trị viên (tài khoản dịch vụ). Thay vào đó, hãy sử dụng tùy chọn auth để chạy các chức năng với tư cách là người dùng cuối cụ thể hoặc với tư cách là người dùng chưa được xác thực:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Gọi các hàm Firestore

Khi chạy các chức năng Firestore cục bộ, bạn sẽ cần cung cấp dữ liệu thử nghiệm thích hợp. Điều này thường có nghĩa là cung cấp dữ liệu thử nghiệm mới cho các hoạt động onCreate , dữ liệu cũ / đã loại bỏ cho các hoạt động onDelete và cả cho các hàm onUpdate hoặc onWrite . Lưu ý rằng dữ liệu Firestore phải là các cặp khóa-giá trị; xem Các loại dữ liệu được hỗ trợ .

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

Ngoài các trường before/after của đối tượng data , bạn có thể sử dụng các trường params số trên đối tượng options để mô phỏng các ký tự đại diện trong tên tài liệu:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

Shell luôn chạy các chức năng Firestore với các đặc quyền quản trị, có nghĩa là nó chế nhạo một sự kiện tạo / cập nhật / xóa như thể nó được thực hiện bởi một người dùng quản trị.

Gọi các hàm PubSub

Đối với các chức năng PubSub, hãy chèn trọng tải thư của bạn trong một phiên bản Buffer và thêm các thuộc tính dữ liệu tùy chọn như được hiển thị:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

Gọi các chức năng Analytics

Bạn có thể gọi một hàm Analytics mà không cần bất kỳ dữ liệu nào bằng cách chạy myAnalyticsFunction() trong shell. Để chạy hàm với dữ liệu thử nghiệm, bạn nên xác định một biến cho các trường dữ liệu sự kiện cụ thể mà hàm của bạn cần:

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

Gọi các chức năng Lưu trữ và Xác thực

Đối với các hàm Storage và Auth, hãy gọi hàm local với dữ liệu thử nghiệm mà bạn muốn xem bên trong hàm. Dữ liệu thử nghiệm của bạn phải tuân theo các định dạng dữ liệu tương ứng:

Chỉ chỉ định các trường mà mã của bạn phụ thuộc vào hoặc không có trường nào nếu bạn chỉ muốn chạy hàm.