Xây dựng bài kiểm thử đơn vị

Firebase Local Emulator Suite giúp bạn dễ dàng xác thực đầy đủ các tính năng và hành vi của ứng dụng. Đây cũng là một công cụ hữu ích để xác minh cấu hình Firebase Security Rules của bạn. Sử dụng Trình mô phỏng Firebase để chạy và tự động hoá các kiểm thử đơn vị trong môi trường cục bộ. Các phương pháp được trình bày trong tài liệu này sẽ giúp bạn xây dựng và tự động hoá các kiểm thử đơn vị cho ứng dụng để xác thực Rules.

Nếu bạn chưa thực hiện, hãy thiết lập Trình mô phỏng Firebase.

Trước khi bạn chạy trình mô phỏng

Trước khi bắt đầu sử dụng trình mô phỏng, hãy lưu ý những điều sau:

  • Ban đầu, trình mô phỏng sẽ tải các quy tắc được chỉ định trong trường firestore.rules hoặc storage.rules của tệp firebase.json. Nếu tệp không tồn tại và bạn không sử dụng phương thức loadFirestoreRules hoặc loadStorageRules như mô tả bên dưới, thì trình mô phỏng sẽ coi tất cả các dự án đều có quy tắc mở.
  • Mặc dù hầu hết các Firebase SDK đều hoạt động trực tiếp với trình mô phỏng, nhưng chỉ có thư viện @firebase/rules-unit-testing hỗ trợ mô phỏng auth trong Quy tắc bảo mật, giúp các kiểm thử đơn vị trở nên dễ dàng hơn nhiều. Ngoài ra, thư viện này còn hỗ trợ một số tính năng dành riêng cho trình mô phỏng, chẳng hạn như xoá tất cả dữ liệu, như được liệt kê dưới đây.
  • Các trình mô phỏng cũng sẽ chấp nhận mã thông báo Firebase Auth do sản xuất được cung cấp thông qua SDK ứng dụng và đánh giá các quy tắc cho phù hợp. Điều này cho phép kết nối trực tiếp ứng dụng của bạn với các trình mô phỏng trong quá trình tích hợp và kiểm thử thủ công.

Sự khác biệt giữa trình mô phỏng cơ sở dữ liệu và bản phát hành công khai

  • Bạn không cần phải tạo một thực thể cơ sở dữ liệu một cách rõ ràng. Trình mô phỏng sẽ tự động tạo mọi thực thể cơ sở dữ liệu được truy cập.
  • Mỗi cơ sở dữ liệu mới đều bắt đầu bằng các quy tắc khép kín, vì vậy, người dùng không phải là quản trị viên sẽ không thể đọc hoặc ghi.
  • Mỗi cơ sở dữ liệu được mô phỏng sẽ áp dụng các hạn mức và hạn ngạch của gói Spark (đáng chú ý nhất là hạn chế mỗi phiên bản có 100 kết nối đồng thời).
  • Mọi cơ sở dữ liệu sẽ chấp nhận chuỗi "owner" làm mã thông báo uỷ quyền quản trị.
  • Hiện tại, các trình mô phỏng không có hoạt động tương tác với các sản phẩm khác của Firebase. Đặc biệt, quy trình Xác thực Firebase thông thường không hoạt động. Thay vào đó, bạn có thể sử dụng phương thức initializeTestApp() trong thư viện rules-unit-testing. Phương thức này lấy một trường auth. Đối tượng Firebase được tạo bằng phương thức này hoạt động như thể đã xác thực thành công dưới dạng bất kỳ thực thể nào mà bạn cung cấp. Nếu bạn truyền null, thì nó sẽ hoạt động như một người dùng chưa được xác thực (ví dụ: các quy tắc auth != null sẽ không thành công).

Tương tác với trình mô phỏng Realtime Database

Bạn có thể truy cập vào một phiên bản Firebase Realtime Database sản xuất tại một miền con của firebaseio.com và bạn có thể truy cập vào API REST như sau:

https://<database_name>.firebaseio.com/path/to/my/data.json

Trình mô phỏng chạy cục bộ và có tại localhost:9000. Để tương tác với một thực thể cơ sở dữ liệu cụ thể, bạn sẽ phải sử dụng tham số truy vấn ns để chỉ định tên cơ sở dữ liệu.

http://localhost:9000/path/to/my/data.json?ns=<database_name>

Chạy kiểm thử đơn vị cục bộ bằng JavaScript SDK phiên bản 9

Firebase phân phối một thư viện kiểm thử đơn vị Security Rules (Quy tắc bảo mật) bằng cả SDK JavaScript phiên bản 9 và SDK phiên bản 8. Các API thư viện có sự khác biệt đáng kể. Bạn nên dùng thư viện kiểm thử phiên bản 9. Thư viện này tinh giản hơn và ít cần thiết lập để kết nối với trình mô phỏng, nhờ đó giúp bạn tránh vô tình sử dụng các tài nguyên sản xuất. Để đảm bảo khả năng tương thích ngược, chúng tôi tiếp tục cung cấp thư viện kiểm thử phiên bản 8.

Sử dụng mô-đun @firebase/rules-unit-testing để tương tác với trình mô phỏng chạy cục bộ. Nếu bạn gặp lỗi hết thời gian chờ hoặc lỗi ECONNREFUSED, hãy kiểm tra kỹ để đảm bảo trình mô phỏng đang chạy.

Bạn nên sử dụng phiên bản Node.js gần đây để có thể sử dụng ký hiệu async/await. Hầu hết hành vi mà bạn có thể muốn kiểm thử đều liên quan đến các hàm không đồng bộ và mô-đun kiểm thử được thiết kế để hoạt động với mã dựa trên Promise.

Thư viện Kiểm thử đơn vị theo quy tắc phiên bản 9 luôn nhận biết được các trình mô phỏng và không bao giờ ảnh hưởng đến tài nguyên sản xuất của bạn.

Bạn nhập thư viện bằng cách sử dụng câu lệnh nhập theo mô-đun phiên bản 9. Ví dụ:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment
} from "@firebase/rules-unit-testing"

// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.

Sau khi nhập, việc triển khai kiểm thử đơn vị sẽ bao gồm:

  • Tạo và định cấu hình RulesTestEnvironment bằng lệnh gọi đến initializeTestEnvironment.
  • Thiết lập dữ liệu kiểm thử mà không kích hoạt Rules, bằng cách sử dụng một phương thức thuận tiện cho phép bạn tạm thời bỏ qua các phương thức này, RulesTestEnvironment.withSecurityRulesDisabled.
  • Thiết lập bộ thử nghiệm và các lệnh gọi trước/sau mỗi thử nghiệm để dọn dẹp dữ liệu và môi trường thử nghiệm, chẳng hạn như RulesTestEnvironment.cleanup() hoặc RulesTestEnvironment.clearFirestore().
  • Triển khai các trường hợp kiểm thử mô phỏng trạng thái xác thực bằng cách sử dụng RulesTestEnvironment.authenticatedContextRulesTestEnvironment.unauthenticatedContext.

Các phương thức và hàm tiện ích phổ biến

Ngoài ra, hãy xem các phương thức kiểm thử dành riêng cho trình mô phỏng bằng cách sử dụng API theo mô-đun.

initializeTestEnvironment() => RulesTestEnvironment

Hàm này khởi tạo một môi trường kiểm thử để kiểm thử đơn vị quy tắc. Trước tiên, hãy gọi hàm này để thiết lập kiểm thử. Để thực thi thành công, bạn cần chạy trình mô phỏng.

Hàm này chấp nhận một đối tượng không bắt buộc xác định TestEnvironmentConfig, có thể bao gồm mã dự án và chế độ cài đặt cấu hình trình mô phỏng.

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

Phương thức này tạo ra một RulesTestContext, hoạt động giống như một người dùng Authentication đã xác thực. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ có mã thông báo Authentication mô phỏng được đính kèm. Bạn có thể tuỳ ý truyền một đối tượng xác định các khai báo tuỳ chỉnh hoặc ghi đè cho tải trọng mã thông báo Authentication.

Sử dụng đối tượng ngữ cảnh kiểm thử được trả về trong các kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, kể cả những thực thể được định cấu hình bằng initializeTestEnvironment.

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", {  });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

Phương thức này tạo ra một RulesTestContext, hoạt động như một ứng dụng không đăng nhập thông qua Authentication. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ không có mã thông báo Xác thực Firebase được đính kèm.

Sử dụng đối tượng ngữ cảnh kiểm thử được trả về trong các kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, kể cả những thực thể được định cấu hình bằng initializeTestEnvironment.

// Assuming a Cloud Storage app and the Storage emulator for this example
import { getStorage, ref, deleteObject } from "firebase/storage";

const alice = testEnv.unauthenticatedContext();

// Use the Cloud Storage instance associated with this context
const desertRef = ref(alice.storage(), 'images/desert.jpg');
await assertSucceeds(deleteObject(desertRef));

RulesTestEnvironment.withSecurityRulesDisabled()

Chạy một hàm thiết lập kiểm thử có ngữ cảnh hoạt động như thể Quy tắc bảo mật đã bị vô hiệu hoá.

Phương thức này sử dụng một hàm gọi lại, hàm này sẽ lấy ngữ cảnh Security-Rules-bypassing và trả về một promise. Ngữ cảnh sẽ bị huỷ sau khi lời hứa phân giải / từ chối.

RulesTestEnvironment.cleanup()

Phương thức này sẽ huỷ tất cả RulesTestContexts được tạo trong môi trường kiểm thử và dọn dẹp các tài nguyên cơ bản, cho phép thoát một cách sạch sẽ.

Phương thức này hoàn toàn không thay đổi trạng thái của trình mô phỏng. Để đặt lại dữ liệu giữa các lần kiểm thử, hãy sử dụng phương thức xoá dữ liệu dành riêng cho trình mô phỏng ứng dụng.

assertSucceeds(pr: Promise<any>)) => Promise<any>

Đây là một hàm tiện ích của trường hợp kiểm thử.

Hàm này khẳng định rằng Promise được cung cấp bao bọc một thao tác trình mô phỏng sẽ được phân giải mà không có lỗi vi phạm Quy tắc bảo mật.

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

Đây là một hàm tiện ích của trường hợp kiểm thử.

Hàm này khẳng định rằng Promise được cung cấp bao bọc một thao tác trình mô phỏng sẽ bị từ chối do vi phạm Quy tắc bảo mật.

await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });

Các phương thức dành riêng cho trình mô phỏng

Bạn cũng có thể xem các phương thức kiểm thử và hàm tiện ích phổ biến bằng cách sử dụng API theo mô-đun.

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Phương thức này xoá dữ liệu trong cơ sở dữ liệu Firestore thuộc projectId được định cấu hình cho trình mô phỏng Firestore.

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

Phương thức này lấy một thực thể Firestore cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng phiên bản Firebase JS Client SDK được trả về với các API SDK ứng dụng (v9 theo mô-đun hoặc v9 tương thích).

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

Phương thức này xoá dữ liệu trong Realtime Database thuộc về projectId được định cấu hình cho trình mô phỏng Realtime Database.

RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;

Nhận một thực thể Realtime Database cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng phiên bản Firebase JS Client SDK được trả về với các API SDK ứng dụng (theo mô-đun hoặc theo không gian tên, phiên bản 9 trở lên). Phương thức này chấp nhận một URL của phiên bản Realtime Database. Nếu được chỉ định, sẽ trả về một phiên bản cho phiên bản mô phỏng của không gian tên với các tham số được trích xuất từ URL.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

Phương thức này xoá các đối tượng và siêu dữ liệu trong các vùng lưu trữ thuộc về projectId được định cấu hình cho trình mô phỏng Cloud Storage.

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

Phương thức này trả về một thực thể Storage được định cấu hình để kết nối với trình mô phỏng. Phương thức này chấp nhận một URL gs:// đến Bộ chứa lưu trữ Firebase để kiểm thử. Nếu được chỉ định, hàm này sẽ trả về một thực thể Storage cho phiên bản mô phỏng của tên nhóm.

Chạy kiểm thử đơn vị cục bộ bằng SDK JavaScript v8

Chọn một sản phẩm để xem các phương thức mà Firebase Test SDK dùng để tương tác với trình mô phỏng.

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

Phương thức này trả về một ứng dụng Firebase đã khởi chạy tương ứng với mã dự án và biến uỷ quyền được chỉ định trong các lựa chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

Phương thức này trả về một ứng dụng Firebase dành cho quản trị viên đã được khởi tạo. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện thao tác đọc và ghi. Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên để đặt trạng thái cho các kiểm thử.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Phương thức này trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy. Dùng phương thức này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm thử.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Phương thức này gửi các quy tắc đến một cơ sở dữ liệu đang chạy cục bộ. Phương thức này lấy một đối tượng chỉ định các quy tắc dưới dạng một chuỗi. Hãy sử dụng phương thức này để đặt các quy tắc cho cơ sở dữ liệu của bạn.

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

Phương thức này trả về một lời hứa bị từ chối nếu đầu vào thành công hoặc thành công nếu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem thao tác đọc hoặc ghi cơ sở dữ liệu có thất bại hay không.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

Phương thức này trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem thao tác đọc hoặc ghi cơ sở dữ liệu có thành công hay không.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

Phương thức này sẽ xoá tất cả dữ liệu liên kết với một dự án cụ thể trong phiên bản Firestore đang chạy cục bộ. Sử dụng phương thức này để dọn dẹp sau khi kiểm thử.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.

Trả về một ứng dụng Firebase đã khởi chạy tương ứng với tên cơ sở dữ liệu và biến auth ghi đè được chỉ định trong các tuỳ chọn.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các kiểm thử.

Trả về một ứng dụng Firebase dành cho quản trị viên đã khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các lựa chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào cơ sở dữ liệu.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Sử dụng lựa chọn này để đặt các quy tắc cho cơ sở dữ liệu của bạn.

Gửi các quy tắc đến một cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tuỳ chọn chỉ định "databaseName" và "rules" của bạn dưới dạng các chuỗi.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.

Sử dụng phương thức này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy có trình nghe đang hoạt động sẽ ngăn JavaScript thoát):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Trả về một lời hứa bị từ chối nếu đầu vào thành công và thành công nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi cơ sở dữ liệu không thành công:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Trả về một lời hứa thành công nếu đầu vào thành công và bị từ chối nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng một thao tác đọc hoặc ghi cơ sở dữ liệu đã thành công:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud Storage

Cloud Storage

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.

Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên vùng chứa lưu trữ và chế độ ghi đè biến xác thực được chỉ định trong các lựa chọn.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các kiểm thử.

Trả về một ứng dụng firebase quản trị đã khởi chạy tương ứng với tên nhóm lưu trữ được chỉ định trong các lựa chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào nhóm.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Sử dụng chế độ này để đặt các quy tắc cho nhóm lưu trữ.

Gửi các quy tắc đến bộ chứa lưu trữ do địa phương quản lý. Lấy một đối tượng tuỳ chọn chỉ định "storageBucket" và "rules" của bạn dưới dạng các chuỗi.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.

Sử dụng phương thức này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy có trình nghe đang hoạt động sẽ ngăn JavaScript thoát):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Trả về một lời hứa bị từ chối nếu đầu vào thành công và thành công nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào bộ chứa lưu trữ không thành công:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

Trả về một lời hứa thành công nếu đầu vào thành công và bị từ chối nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào một vùng lưu trữ đã thành công:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());

API thư viện RUT cho JS SDK phiên bản 8

Chọn một sản phẩm để xem các phương thức mà Firebase Test SDK dùng để tương tác với trình mô phỏng.

Cloud Firestore

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

Phương thức này trả về một ứng dụng Firebase đã khởi chạy tương ứng với mã dự án và biến uỷ quyền được chỉ định trong các lựa chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

Phương thức này trả về một ứng dụng Firebase dành cho quản trị viên đã được khởi tạo. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện thao tác đọc và ghi. Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên để đặt trạng thái cho các kiểm thử.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Phương thức này trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy. Dùng phương thức này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm thử.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Phương thức này gửi các quy tắc đến một cơ sở dữ liệu đang chạy cục bộ. Phương thức này lấy một đối tượng chỉ định các quy tắc dưới dạng một chuỗi. Hãy sử dụng phương thức này để đặt các quy tắc cho cơ sở dữ liệu của bạn.

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

Phương thức này trả về một lời hứa bị từ chối nếu đầu vào thành công hoặc thành công nếu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem thao tác đọc hoặc ghi cơ sở dữ liệu có thất bại hay không.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

Phương thức này trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem thao tác đọc hoặc ghi cơ sở dữ liệu có thành công hay không.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

Phương thức này sẽ xoá tất cả dữ liệu liên kết với một dự án cụ thể trong phiên bản Firestore đang chạy cục bộ. Sử dụng phương thức này để dọn dẹp sau khi kiểm thử.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.

Trả về một ứng dụng Firebase đã khởi chạy tương ứng với tên cơ sở dữ liệu và biến auth ghi đè được chỉ định trong các tuỳ chọn.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các kiểm thử.

Trả về một ứng dụng Firebase dành cho quản trị viên đã khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các lựa chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào cơ sở dữ liệu.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Sử dụng lựa chọn này để đặt các quy tắc cho cơ sở dữ liệu của bạn.

Gửi các quy tắc đến một cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tuỳ chọn chỉ định "databaseName" và "rules" của bạn dưới dạng các chuỗi.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.

Sử dụng phương thức này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy có trình nghe đang hoạt động sẽ ngăn JavaScript thoát):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Trả về một lời hứa bị từ chối nếu đầu vào thành công và thành công nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi cơ sở dữ liệu không thành công:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Trả về một lời hứa thành công nếu đầu vào thành công và bị từ chối nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng một thao tác đọc hoặc ghi cơ sở dữ liệu đã thành công:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud Storage

Cloud Storage

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.

Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên vùng chứa lưu trữ và chế độ ghi đè biến xác thực được chỉ định trong các lựa chọn.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các kiểm thử.

Trả về một ứng dụng firebase quản trị đã khởi chạy tương ứng với tên nhóm lưu trữ được chỉ định trong các lựa chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào nhóm.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Sử dụng chế độ này để đặt các quy tắc cho nhóm lưu trữ.

Gửi các quy tắc đến bộ chứa lưu trữ do địa phương quản lý. Lấy một đối tượng tuỳ chọn chỉ định "storageBucket" và "rules" của bạn dưới dạng các chuỗi.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.

Sử dụng phương thức này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy có trình nghe đang hoạt động sẽ ngăn JavaScript thoát):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Trả về một lời hứa bị từ chối nếu đầu vào thành công và thành công nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào bộ chứa lưu trữ không thành công:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

Trả về một lời hứa thành công nếu đầu vào thành công và bị từ chối nếu đầu vào bị từ chối.

Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào một vùng lưu trữ đã thành công:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());