Vỏ Cloud Functions cung cấp một shell tương tác để gọi với 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 bạn muốn các phép kiểm thử hàm của mình tương tác với API của Google hoặc Firebase khác API thông qua SDK quản trị của Firebase, bạn có thể cần thiết lập thông tin đăng nhập của quản trị viên.
- Điều kiện kích hoạt Cloud Firestore và Realtime Database đã có đủ thông tin đăng nhập và không yêu cầu thiết lập thêm.
- Tất cả các API khác, kể cả API của Firebase như Authentication và FCM hoặc API của Google (chẳng hạn như Cloud Translation hoặc Cloud Speech) đều cần phải thực hiện các bước thiết lập như mô tả trong phần này. Điều này áp dụng cho dù bạn đang sử dụng shell 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.
- Hãy đảm bảo rằng 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 Create key (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 trên Google của bạn để 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 thành các bước này, các thử nghiệm chức năng của bạn có thể truy cập vào Firebase và
API của Google bằng cách sử dụng SDK quản trị. Ví dụ: khi kiểm thử
điều kiện kích hoạt Authentication, hàm được mô phỏng có thể gọi
admin.auth().getUserByEmail(email)
.
Cung cấp các hàm bằng shell Cloud Functions
shell Cloud Functions mô phỏng tất cả các loại điều kiện kích hoạt hàm bằng một shell tương tác để gọi các hàm có dữ liệu kiểm thử. Các lựa chọn có thể khác nhau theo loại hàm, nhưng định dạng sử dụng cơ bản là:
myFunctionName(data, options)
Bạn phải có tham số data
cho Cơ sở dữ liệu theo thời gian thực, Cloud Firestore,
và trình kích hoạt PubSub cũng như không bắt buộc đối với mọi loại hàm khác.
Ngoài ra, tham số options
không bắt buộc chỉ hợp lệ cho Cơ sở dữ liệu theo thời gian thực
và các hàm Cloud Firestore.
Nếu muốn, bạn có thể tải dữ liệu thử nghiệm từ bằng cách lưu tệp dưới dạng biến và gọi hàm bằng biến đó:
var data = require('./path/to/testData.json');
myFunction(data);
Cài đặt và định cấu hình shell Cloud Functions
Để 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 biến cấu hình của hàm tùy chỉnh, trước tiên hãy chạy
để lấy cấu hình tuỳ chỉnh của bạn (chạy lệnh này trong thư mục functions
)
trong môi trường địa phương:
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 giống như
request
Mô-đun TLD, 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 hàm có thể gọi qua HTTPS
Khi gọi các hàm có thể gọi qua HTTPS cục bộ, bạn cần cung cấp dữ liệu kiểm thử thích hợp.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Nếu muốn, bạn có thể chuyển vào Firebase-Instance-ID-token
dưới dạng 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ơ sở dữ liệu theo thời gian thực
Khi chạy các hàm Cơ sở dữ liệu theo thời gian thực cục bộ, bạn cần cung cấp
dữ liệu thử nghiệm phù hợp. Nói chung, điều này có nghĩa là cung cấp dữ liệu thử nghiệm mới cho
onCreate
hoạt động, dữ liệu cũ/đã xoá của onDelete
và cả hai hoạt động cho
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 tuỳ chọn before/after
, shell cung cấp params
để sử dụng khi mô phỏng ký tự đại diện trong đườ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, shell chạy các chức năng của Cơ sở dữ liệu theo thời gian thực bằng quản trị viên (tài khoản dịch vụ)
đặc quyền. Thay vào đó, hãy sử dụng tuỳ chọn auth
để chạy các hàm dưới dạng một
người dùng cuối 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 hàm Firestore cục bộ, bạn cần cung cấp
dữ liệu thử nghiệm phù hợp. Nói chung, điều này có nghĩa là cung cấp dữ liệu thử nghiệm mới cho
onCreate
hoạt động, dữ liệu cũ/đã xoá của onDelete
và cả hai hoạt động cho
Hàm onUpdate
hoặc onWrite
. Lưu ý rằng dữ liệu Firestore phải
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ể dùng các trường params
trên đối tượng options
để mô phỏng
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}})
Giao diện này luôn chạy các hàm Firestore có đặc quyền của quản trị viên mà có nghĩa là sự kiện đó mô phỏng một sự kiện tạo/cập nhật/xoá như thể được thực hiện bởi người dùng có quyền quản trị.
Gọi các hàm PubSub
Đối với các hàm PubSub, hãy chèn phần tải trọng tin nhắn 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ư sau:
// 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 bất kỳ dữ liệu nào bằng cách
chạy myAnalyticsFunction()
trong shell.
Để chạy hàm có 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 hàm Lưu trữ và Xác thực
Đố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ử bạn muốn xem bên trong hàm. Dữ liệu kiểm thử 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ỉ chỉ định các trường mà mã của bạn phụ thuộc vào, hoặc hoàn toàn không chỉ định các trường nếu bạn chỉ muốn chạy hàm này.