Kiểm thử hàm theo cách tương tác

Vỏ này 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 phép 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 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.

  • Các điều kiện kích hoạt Cơ sở dữ liệu theo thời gian thực và Cloud Firestore đã 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ả các API của Firebase (chẳng hạn như API Xác thực và FCM) hoặc API của Google (chẳng hạn 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 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:

  1. Mở ngăn Tài khoản dịch vụ trên bảng điều khiển Google Cloud.
  2. Hãy nhớ chọn App Engine mặc định tài khoản dịch vụ và sử dụng trình đơn tuỳ chọn ở bên phải để chọn Create key (Tạo khoá).
  3. Khi được nhắc, hãy chọn JSON cho loại khoá rồi nhấp vào Tạo.
  4. Đặ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 tất các bước này, các hoạt động kiểm thử 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 cách sử dụng SDK dành cho quản trị viên. Ví dụ: khi kiểm thử một điều kiện kích hoạt Xác thực, chức năng đượ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 bằng dữ liệu kiểm thử. Các tuỳ chọn còn tuỳ theo loại hàm, nhưng định dạng sử dụng cơ bản là:

myFunctionName(data, options)

Tham số data là bắt buộc cho các điều kiện kích hoạt Cơ sở dữ liệu theo thời gian thực, Cloud Firestore và PubSub, và 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ệ cho các hàm Cơ sở dữ liệu theo thời gian thực và các hàm Cloud Firestore.

Bạn có thể tuỳ ý 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 biến và gọi một hàm bằng tệp đó:

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 các biến cấu hình của hàm tuỳ chỉnh, trước tiên, hãy chạy lệnh để 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 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, 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ư mô-đun request GMS, 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ơ sở dữ liệu theo thời gian thực hoạt động cục bộ, bạn cần cung cấp dữ liệu kiểm thử thích hợp. Nói chung, điều này có nghĩa là cung cấp dữ liệu kiểm thử mới cho thao tác onCreate, dữ liệu cũ/đã xoá cho thao tác onDelete và cho cả hai 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 còn cung cấp tuỳ chọn params để sử dụng khi 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, shell này sẽ chạy các chức năng của Cơ sở dữ liệu theo 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 tuỳ chọn auth để chạy các hàm với tư cách là một 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 hàm Firestore cục bộ, bạn cần cung cấp dữ liệu kiểm thử phù hợp. Nói chung, điều này có nghĩa là cung cấp dữ liệu kiểm thử mới cho thao tác onCreate, dữ liệu cũ/đã xoá cho thao tác onDelete, và cho cả hai hàm onUpdate hoặc onWrite. Lưu ý rằng dữ liệu Firestore phải là các cặp khoá-giá trị; hãy xem phần 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 thẻ đạ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 có đặc quyền của quản trị viên, nghĩa là shell mô phỏng một sự kiện tạo/cập nhật/xoá như thể nó do người dùng quản trị thực hiện.

Gọi các hàm PubSub

Đối với các hàm PubSub, hãy chè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ử mà bạn muốn xem 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:

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.