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ụ tuyệt vời để xác minh cấu hình Firebase Security Rules. Sử dụng Trình mô phỏng Firebase để chạy và tự động hoá kiểm thử đơn vị trong môi trường cục bộ. Các phương thức được nêu trong tài liệu này sẽ giúp bạn khi tạo và tự động hoá các chương trình kiểm thử đơn vị cho ứng dụng xác thực Rules.

Thiết lập Trình mô phỏng Firebase nếu bạn chưa thiết lập.

Trước khi 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ả dự án đều có quy tắc mở.
  • Mặc dù hầu hết SDK Firebase hoạt động trực tiếp với trình mô phỏng, nhưng chỉ thư viện @firebase/rules-unit-testing mới hỗ trợ mô phỏng auth trong Quy tắc bảo mật, giúp kiểm thử đơn vị dễ dàng hơn nhiều. Ngoài ra, thư viện hỗ trợ một số tính năng dành riêng cho trình mô phỏng như xoá tất cả dữ liệu, như liệt kê dưới đây.
  • Trình mô phỏng cũng sẽ chấp nhận mã thông báo xác thực Firebase chính thức được cung cấp thông qua SDK ứng dụng và đánh giá các quy tắc cho phù hợp, cho phép kết nối trực tiếp ứng dụng của bạn với 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 chính thức

  • 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 được bắt đầu bằng các quy tắc đóng, vì vậy, người dùng không phải quản trị viên sẽ không thể đọc hoặc ghi.
  • Mỗi cơ sở dữ liệu được mô phỏng đều áp dụng các giới hạn và hạn mức của gói Spark (đáng chú ý nhất là mỗi thực thể chỉ được phép có 100 kết nối đồng thời).
  • Mọi cơ sở dữ liệu đều chấp nhận chuỗi "owner" làm mã thông báo xác thực quản trị.
  • Trình mô phỏng hiện không có lượt tương tác nào với các sản phẩm Firebase khác. Đáng chú ý là 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 sẽ lấy 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 vào null, thì giá trị này 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 thực thể Realtime Database Firebase chính thức tại một miền con của firebaseio.com và 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 SDK JavaScript phiên bản 9

Firebase phân phối một thư viện kiểm thử đơn vị Quy tắc bảo mật với cả SDK JavaScript phiên bản 9 và SDK phiên bản 8 của thư viện đó. Các API thư viện có sự khác biệt đáng kể. Bạn nên sử dụng thư viện kiểm thử v9, thư viện này được tinh giản hơn và yêu cầu ít thiết lập hơn để kết nối với trình mô phỏng, nhờ đó tránh được việc vô tình sử dụng tài nguyên sản xuất một cách an toàn. Để đả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ử v8.

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 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 mới để 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 Lời hứa.

Thư viện Kiểm thử đơn vị theo quy tắc v9 luôn nhận biết được trình mô phỏng và không bao giờ chạm vào 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 mô-đun v9. 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, 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 dữ liệu đó, RulesTestEnvironment.withSecurityRulesDisabled.
  • Thiết lập bộ kiểm thử và mỗi hàm trước/sau kiểm thử bằng các lệnh gọi để dọn dẹp dữ liệu và môi trường kiểm thử, 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 API 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ư 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 thông báo xác nhận 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ử của bạn để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, bao gồm 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 một RulesTestContext, hoạt động như một ứng dụng không đăng nhập 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 chương trình kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, bao gồm cả các 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ử với ngữ cảnh hoạt động như thể Quy tắc bảo mật bị tắt.

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

RulesTestEnvironment.cleanup()

Phương thức này huỷ bỏ 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 sạch.

Phương thức này không làm thay đổi trạng thái của trình mô phỏng theo bất kỳ cách nào. Để đặ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 hiệu dụng trường hợp kiểm thử.

Hàm này xác nhận rằng Lời hứa được cung cấp bao gồm một thao tác của trình mô phỏng sẽ được giải quyết 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à hàm tiện ích của trường hợp kiểm thử.

Hàm này xác nhận rằng Lời hứa được cung cấp bao gồm một thao tác của 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'), { ... });

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

Ngoài ra, hãy xem các phương thức kiểm thử phổ biến và hàm tiện ích sử dụng API 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 về projectId đã đị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 SDK ứng dụng Firebase JS được trả về với các API SDK ứng dụng (mô-đun phiên bản 9 hoặc khả năng tương thích phiên bản 9).

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;

Lấy một thực thể Realtime Database cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng thực thể SDK ứng dụng JS Firebase được trả về với các API SDK ứng dụng (mô-đun hoặc được phân không gian tên, phiên bản 9 trở lên). Phương thức này chấp nhận URL của thực thể Cơ sở dữ liệu theo thời gian thực. Nếu được chỉ định, phương thức này sẽ trả về một bản sao của phiên bản được 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 bộ chứa bộ nhớ thuộc 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 phiên bản Storage đã đị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 URL gs:// đến Bộ chứa Firebase Storage để kiểm thử. Nếu được chỉ định, sẽ trả về một thực thể Storage cho phiên bản mô phỏng của tên bộ chứa.

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à SDK Kiểm thử Firebase sử dụng để giao tiếp 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 xác thực được chỉ định trong các tuỳ chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong 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 quản trị đã khởi chạy. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện các thao tác đọc và ghi. Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm đặt trạng thái cho các bài kiểm thử.

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

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

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

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

Phương thức này sẽ 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 sẽ lấy một đối tượng chỉ định các quy tắc dưới dạng chuỗi. Sử dụng phương thức này để đặt quy tắc của cơ sở dữ liệu.

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 dữ liệu đầu vào thành công hoặc thành công 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 một cơ sở dữ liệu có thể đọc hoặc ghi 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 một cơ sở dữ liệu có đọc hoặc ghi 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 xoá tất cả dữ liệu liên kết với một dự án cụ thể trong bản sao Firestore chạy cục bộ. Hãy sử dụng phương thức này để làm sạch dữ liệu sau khi kiểm thử.

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

Realtime Database

Realtime Database

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

Sử dụng dữ liệu này để tạo một ứng dụng được xác thực là 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à ghi đè biến xác thực được chỉ định trong các tuỳ chọn.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

Trả về ứng dụng quản trị đã khởi tạo trong Firebase tương ứng với tên cơ sở dữ liệu được chỉ định trong các tuỳ 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ớp này để đặt quy tắc của cơ sở dữ liệu.

Gửi các quy tắc đến 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" dưới dạng chuỗi.

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

apps() => [FirebaseApp]

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

Sử dụng mã này để dọn dẹp ứ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 với 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ề lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.

Sử dụng câu lệnh này để xác nhận rằng một cơ sở dữ liệu không đọc hoặc ghi được:

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 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.

Dùng phương thức này để xác nhận rằng cơ sở dữ liệu đã đọc hoặc ghi 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 dữ liệu này để tạo một ứng dụng được xác thực là 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 bộ chứa bộ nhớ và ghi đè biến xác thực được chỉ định trong các tuỳ chọn.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài 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 bộ chứa bộ nhớ được chỉ định trong các tuỳ chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào bộ chứa.

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

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

Sử dụng tính năng này để đặt quy tắc cho bộ nhớ của bạn.

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

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

apps() => [FirebaseApp]

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

Sử dụng mã này để dọn dẹp ứ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 với 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 dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.

Sử dụng mã này để xác nhận rằng một bộ chứa bộ nhớ không đọc hoặc ghi được:

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 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 rằng một bộ chứa bộ nhớ đã đọc hoặc ghi thành công:

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

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

Chọn một sản phẩm để xem các phương thức mà SDK Kiểm thử Firebase sử dụng để giao tiếp 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 xác thực được chỉ định trong các tuỳ chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong 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 quản trị đã khởi chạy. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện các thao tác đọc và ghi. Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm đặt trạng thái cho các bài kiểm thử.

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

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

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

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

Phương thức này sẽ 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 sẽ lấy một đối tượng chỉ định các quy tắc dưới dạng chuỗi. Sử dụng phương thức này để đặt quy tắc của cơ sở dữ liệu.

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 dữ liệu đầu vào thành công hoặc thành công 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 một cơ sở dữ liệu có thể đọc hoặc ghi 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 một cơ sở dữ liệu có đọc hoặc ghi 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 xoá tất cả dữ liệu liên kết với một dự án cụ thể trong bản sao Firestore chạy cục bộ. Hãy sử dụng phương thức này để làm sạch dữ liệu sau khi kiểm thử.

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

Realtime Database

Realtime Database

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

Sử dụng dữ liệu này để tạo một ứng dụng được xác thực là 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à ghi đè biến xác thực được chỉ định trong các tuỳ chọn.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

Trả về ứng dụng quản trị đã khởi tạo trong Firebase tương ứng với tên cơ sở dữ liệu được chỉ định trong các tuỳ 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ớp này để đặt quy tắc của cơ sở dữ liệu.

Gửi các quy tắc đến 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" dưới dạng chuỗi.

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

apps() => [FirebaseApp]

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

Sử dụng mã này để dọn dẹp ứ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 với 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ề lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.

Sử dụng câu lệnh này để xác nhận rằng một cơ sở dữ liệu không đọc hoặc ghi được:

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 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.

Dùng phương thức này để xác nhận rằng cơ sở dữ liệu đã đọc hoặc ghi 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 dữ liệu này để tạo một ứng dụng được xác thực là 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 bộ chứa bộ nhớ và ghi đè biến xác thực được chỉ định trong các tuỳ chọn.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài 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 bộ chứa bộ nhớ được chỉ định trong các tuỳ chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào bộ chứa.

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

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

Sử dụng tính năng này để đặt quy tắc cho bộ nhớ của bạn.

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

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

apps() => [FirebaseApp]

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

Sử dụng mã này để dọn dẹp ứ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 với 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 dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.

Sử dụng mã này để xác nhận rằng một bộ chứa bộ nhớ không đọc hoặc ghi được:

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 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 rằng một bộ chứa bộ nhớ đã đọc hoặc ghi thành công:

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