Shell Cloud Functions cung cấp một shell tương tác để gọi các hàm bằng dữ liệu kiểm thử. Shell hỗ trợ tất cả các loại điều kiện kích hoạt.
Thiết lập thông tin đăng nhập của quản trị viên (không bắt buộc)
Nếu muốn các kiểm thử hàm của mình tương tác với API của Google hoặc các API khác của Firebase thông qua Firebase Admin SDK, bạn có thể cần thiết lập thông tin đăng nhập của quản trị viên.
- Các điều kiện kích hoạt Cloud Firestore và Realtime Database đã có đủ thông tin xác thực và không yêu cầu thiết lập thêm.
- Tất cả các API khác, bao gồm cả API Firebase như Authentication và FCM hoặc API Google như Cloud Translation hoặc Cloud Speech, đề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 cả khi bạn đang sử dụng trình bao Cloud Functions hay
firebase emulators:start
.
Cách thiết lập thông tin đăng nhập của quản trị viên cho các chức năng được mô phỏng:
- Mở ngăn Tài khoản dịch vụ của bảng điều khiển Google Cloud.
- Đảm bảo bạn đã chọn App Engine tài khoản dịch vụ mặc định và sử dụng trình đơn tuỳ chọn ở bên phải để chọn Tạo khoá.
- Khi được nhắc, hãy chọn JSON cho loại khoá rồi nhấp vào Tạo.
Đặt thông tin xác thực mặc định của Google để trỏ đến khoá đã tải xuống:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Sau khi hoàn tất các bước này, các kiểm thử hàm của bạn có thể truy cập vào Firebase và các API của Google bằng Admin SDK. Ví dụ: khi kiểm thử một trình kích hoạt Authentication, hàm được mô phỏng có thể gọi admin.auth().getUserByEmail(email)
.
Phân phát các hàm bằng cách sử dụng một shell Cloud Functions
Trình mô phỏng shell Cloud Functions mô phỏng tất cả các loại trình kích hoạt hàm bằng một shell tương tác để gọi các hàm bằng dữ liệu kiểm thử. Các lựa chọn khác nhau theo loại hàm, nhưng định dạng sử dụng cơ bản là:
myFunctionName(data, options)
Tham số data
là tham số bắt buộc đối với các trình kích hoạt Cơ sở dữ liệu theo thời gian thực, Cloud Firestore và PubSub, đồng thời là tham số không bắt buộc đối với tất cả các loại hàm khác.
Ngoài ra, tham số options
không bắt buộc chỉ hợp lệ đối với các hàm Cơ sở dữ liệu theo thời gian thực và Cloud Firestore.
Bạn có thể tải dữ liệu kiểm thử 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 bằng tệp đó (không bắt buộc):
var data = require('./path/to/testData.json');
myFunction(data);
Cài đặt và định cấu hình trình bao Cloud Functions
Để sử dụng tính năng này, firebase-tools
phải có phiên bản tối thiểu là 3.11.0 và SDK firebase-functions
phải có phiên bản tối thiểu là 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 tuỳ chỉnh, trước tiên, hãy chạy lệnh để nhận cấu hình tuỳ chỉnh (chạy lệnh này trong thư mục functions
) trong môi trường cục bộ:
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, hãy chạy shell bằng lệnh sau:
firebase functions:shell
Gọi các hàm HTTPS
Để gọi các hàm HTTPS trong shell, cách sử dụng cũng giống như mô-đun request
NPM, nhưng hãy thay thế request
bằng tên của hàm 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 hàm có thể gọi qua HTTPS
Khi gọi các hàm có thể gọi HTTPS cục bộ, bạn cần cung cấp dữ liệu kiểm thử phù hợp.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Ngoài ra, bạn có thể truyền Firebase-Instance-ID-token
làm tham số thứ hai. Đây phải là một chuỗi.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
Hiện không thể mô phỏng context.auth
.
Gọi các hàm của Cơ sở dữ liệu theo thời gian thực
Khi chạy các hàm Realtime Database cục bộ, bạn cần cung cấp dữ liệu kiểm thử phù hợp. Điều này thường có nghĩa là bạn phải cung cấp dữ liệu kiểm thử mới cho các thao tác onCreate
, dữ liệu cũ/đã xoá cho các thao tác onDelete
và cả hai 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 lựa chọn before/after
, trình bao còn cung cấp lựa chọn params
để sử dụng trong việc mô phỏng 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 sẽ chạy các hàm Realtime Database với đặc quyền quản trị (tài khoản dịch vụ). Thay vào đó, hãy sử dụng lựa chọn auth
để chạy các hàm dưới dạng một người dùng cuối cụ thể hoặc dưới dạng một 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 hàm Firestore cục bộ, bạn cần cung cấp dữ liệu kiểm thử phù hợp. Điều này thường có nghĩa là bạn phải cung cấp dữ liệu kiểm thử mới cho các thao tác onCreate
, dữ liệu cũ/đã xoá cho các thao tác onDelete
và cả hai cho các hàm onUpdate
hoặc onWrite
. Xin lưu ý rằng dữ liệu Firestore phải là các cặp khoá-giá trị; hãy 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
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 hàm Firestore với đặc quyền quản trị. Điều này có nghĩa là shell mô phỏng một sự kiện tạo/cập nhật/xoá như thể sự kiện đó được thực hiện bởi một người dùng quản trị.
Gọi các hàm Pub/Sub
Đối với các hàm PubSub, hãy chèn tải trọng thông báo của bạn vào một thực thể Buffer
và thêm các thuộc tính dữ liệu (không bắt buộc) như minh hoạ:
// 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 hàm Analytics
Bạn có thể gọi một hàm Analytics mà không cần dữ liệu bằng cách chạy myAnalyticsFunction()
trong shell.
Để chạy hàm bằng dữ liệu kiểm thử, 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: {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);
Gọi các hàm Storage và Auth
Đối với các hàm Lưu trữ và Xác thực, hãy gọi hàm cục bộ bằng dữ liệu kiểm thử mà bạn muốn thấy bên trong hàm. Dữ liệu kiểm thử của bạn phải tuân theo các định dạng dữ liệu tương ứng:
- Đối với Cloud Storage:
ObjectMetadata
- Đối với Authentication:
UserRecord
Chỉ định những trường mà mã của bạn phụ thuộc vào hoặc không chỉ định trường nào nếu bạn chỉ muốn chạy hàm.