Xây dựng các bài kiểm tra đơn vị

Bộ mô phỏng cục bộ Firebase giúp xác thực đầy đủ các tính năng và hành vi của ứng dụng của bạn dễ dàng hơn. Đây cũng là một công cụ tuyệt vời để xác minh cấu hình Quy tắc bảo mật Firebase của bạn. Sử dụng Trình mô phỏng Firebase để chạy và tự động hóa các bài kiểm tra đơn vị trong môi trường cục bộ. Các phương pháp được nêu trong tài liệu này sẽ giúp ích cho bạn khi bạn xây dựng và tự động hóa các thử nghiệm đơn vị cho ứng dụng nhằm xác thực Quy tắc của bạn.

Nếu bạn chưa có, 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ạn bắt đầu sử dụng trình mô phỏng, hãy ghi nhớ những điều sau:

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

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

  • Bạn không cần phải tạo một phiên bản cơ sở dữ liệu một cách rõ ràng. Trình mô phỏng sẽ tự động tạo bất kỳ phiên bản cơ sở dữ liệu nào được truy cập.
  • Mỗi cơ sở dữ liệu mới được bắt đầu với 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 viết.
  • Mỗi cơ sở dữ liệu mô phỏng áp dụng các giới hạn và hạn ngạch của gói Spark (đáng chú ý nhất là điều này giới hạn mỗi phiên bản ở 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 xác thực của quản trị viên.
  • Trình mô phỏng hiện không có tương tác hoạt động với các sản phẩm Firebase khác. Đáng chú ý, luồng 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 , thư viện này có trường auth . Đối tượng Firebase được tạo bằng phương thức này hoạt động như thể nó đã được xác thực thành công với bất kỳ thực thể nào bạn cung cấp. Nếu bạn chuyển vào null , 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 cơ sở dữ liệu thời gian thực

Phiên bản Cơ sở dữ liệu thời gian thực Firebase sản xuất có thể truy cập được tại tên miền phụ của firebaseio.com và bạn có thể truy cập api REST như thế này:

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

Trình mô phỏng chạy cục bộ và có sẵn tại localhost:9000 . Để tương tác với một phiên bản 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 thử nghiệm đơn vị cục bộ với SDK JavaScript phiên bản 9

Firebase phân phối thư viện thử nghiệm đơ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ác API thư viện có sự khác biệt đáng kể. Chúng tôi khuyên dùng thư viện thử nghiệm v9, thư viện này được sắp xếp hợp lý 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. Để tương thích ngược, chúng tôi tiếp tục cung cấp thư viện thử nghiệm 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ỹ xem trình mô phỏng có thực sự đang chạy hay không.

Chúng tôi thực sự khuyên 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 như tất cả hành vi mà bạn có thể muốn kiểm tra đều liên quan đến các hàm không đồng bộ và mô-đun kiểm tra được thiết kế để hoạt động với mã dựa trên Promise.

Thư viện Kiểm tra đơn vị quy tắc v9 luôn nhận thức được trình mô phỏng và không bao giờ động đến tài nguyên sản xuất của bạn.

Bạn nhập thư viện bằ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 được nhập, việc thực hiện các bài kiểm tra đơn vị bao gồm:

  • Tạo và định cấu hình RulesTestEnvironment bằng lệnh gọi initializeTestEnvironment .
  • Thiết lập dữ liệu thử nghiệm mà không kích hoạt Quy tắc, sử dụng phương pháp tiện lợi cho phép bạn tạm thời bỏ qua chúng, RulesTestEnvironment.withSecurityRulesDisabled .
  • Thiết lập bộ kiểm tra và các móc nối trước/sau mỗi bài kiểm tra bằng các lệnh gọi để dọn sạch dữ liệu và môi trường kiểm tra, như RulesTestEnvironment.cleanup() hoặc RulesTestEnvironment.clearFirestore() .
  • Triển khai các trường hợp thử nghiệm bắt chước 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

Đồng thời xem các phương pháp thử nghiệm dành riêng cho trình mô phỏng bằng cách sử dụng API mô-đun .

initializeTestEnvironment() => RulesTestEnvironment

Hàm này khởi tạo môi trường thử nghiệm để thử nghiệm đơn vị quy tắc. Gọi hàm này trước để thiết lập thử nghiệm. Việc thực thi thành công đòi hỏi phải chạy trình mô phỏng.

Hàm này chấp nhận một đối tượng tùy chọn xác định TestEnvironmentConfig , có thể bao gồm ID dự án và 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 RulesTestContext , hoạt động giống như một người dùng Xác thực được xác thực. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ có đính kèm mã thông báo Xác thực giả. Theo tùy chọn, chuyển một đối tượng xác định xác nhận quyền sở hữu tùy chỉnh hoặc ghi đè cho tải trọng mã thông báo xác thực.

Sử dụng đối tượng bối cảnh thử nghiệm được trả về trong thử nghiệm của bạn để truy cập vào mọi phiên bản trình mô phỏng đã định cấu hình, bao gồm cả những phiên bản đượ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 RulesTestContext , hoạt động giống như một ứng dụng khách không đăng nhập thông qua Xác thực. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ không được đính kèm mã thông báo Xác thực Firebase.

Sử dụng đối tượng bối cảnh thử nghiệm được trả về trong thử nghiệm của bạn để truy cập vào mọi phiên bản trình mô phỏng đã định cấu hình, bao gồm cả những phiên bản đượ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 chức năng thiết lập thử nghiệm 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 nhận một hàm gọi lại, lấy bối cảnh bỏ qua Quy tắc bảo mật và trả về một lời hứa. Bối cảnh sẽ bị hủy khi lời hứa được giải quyết/từ chối.

RulesTestEnvironment.cleanup()

Phương pháp này phá hủy tất cả RulesTestContexts được tạo trong môi trường thử nghiệm và dọn sạch các tài nguyên cơ bản, cho phép thoát hoàn toàn.

Phương pháp này không thay đổi trạng thái của trình giả lập dưới bất kỳ hình thức nào. Để đặt lại dữ liệu giữa các lần kiểm tra, hãy sử dụng phương pháp xóa 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 chức năng tiện ích trường hợp thử nghiệm.

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

Hàm xác nhận rằng Promise được cung cấp bao bọc một hoạt động 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 pháp dành riêng cho trình mô phỏng

Đồng thời xem các phương pháp thử nghiệm phổ biến và các chức năng tiện ích sử dụng API mô-đun .

Cửa hàng đám mây

Cửa hàng đám mây

RulesTestEnvironment.clearFirestore() => Promise<void>

Phương thức này xóa 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 phiên bản Firestore cho bối cảnh thử nghiệm này. Phiên bản SDK khách Firebase JS được trả về có thể được sử dụng với API SDK khách (tương thích mô-đun v9 hoặc tương thích v9).

Cơ sở dữ liệu thời gian thực

Cơ sở dữ liệu thời gian thực

RulesTestEnvironment.clearDatabase() => Promise<void>

Phương pháp này xóa dữ liệu trong Cơ sở dữ liệu thời gian thực thuộc về projectId được định cấu hình cho trình mô phỏng Cơ sở dữ liệu thời gian thực.

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

Nhận phiên bản Cơ sở dữ liệu thời gian thực cho bối cảnh thử nghiệm này. Phiên bản SDK khách Firebase JS được trả về có thể được sử dụng với API SDK khách (mô-đun hoặc 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 Cơ sở dữ liệu thời gian thực. Nếu được chỉ định, 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.

Lưu trữ đám mây

Lưu trữ đám mây

RulesTestEnvironment.clearStorage() => Promise<void>

Phương thức này xóa các đối tượng và siêu dữ liệu trong nhóm lưu trữ 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 đượ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 url gs:// vào Nhóm lưu trữ Firebase để thử nghiệm. Nếu được chỉ định, trả về phiên bản Bộ nhớ cho phiên bản mô phỏng của tên nhóm.

Chạy thử nghiệm đơn vị cục bộ với SDK JavaScript v8

Chọn một sản phẩm để xem các phương pháp được SDK thử nghiệm Firebase sử dụng để giao tiếp với trình mô phỏng.

Cửa hàng đám mây

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

Phương thức này trả về ứng dụng Firebase được khởi tạo tương ứng với ID dự án và biến xác thực được chỉ định trong các tùy chọn. Sử dụng tính năng này để tạo ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong các thử nghiệm.

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ề ứng dụng Firebase của quản trị viên đã 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 đọc và ghi. Sử dụng tính năng này để tạo ứng dụng được xác thực với tư cách quản trị viên nhằm đặt trạng thái cho các thử nghiệm.

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

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

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

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

Phương pháp này gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Nó lấy một đối tượng chỉ định các quy tắc dưới dạng một chuỗi. Sử dụng phương pháp này để đặt 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 điều này để xác nhận nếu cơ sở dữ liệu đọc hoặc ghi không thành cô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 đầu vào thành công và bị từ chối nếu đầu vào bị từ chối. Sử dụng điều này để xác nhận xem 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 pháp này xóa tất cả dữ liệu được 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 pháp này để dọn dẹp sau khi kiểm tra.

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

Cơ sở dữ liệu thời gian thực

Cơ sở dữ liệu thời gian thực

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

Sử dụng tính năng này để tạo ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong các thử nghiệm.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

Trả về ứng dụng firebase 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 tùy 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 điều này để đặt quy tắc cơ sở dữ liệu của bạn.

Gửi quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tùy chọn chỉ định "databaseName" và "quy tắc" của bạn dưới dạng 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 quản trị và thử nghiệm hiện được khởi tạo.

Sử dụng tính năng này để dọn sạch ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động sẽ ngăn không cho 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 điều này để xác nhận rằng việ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 điều này để xác nhận rằng việc đọc hoặc ghi cơ sở dữ liệu thành công:

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

Lưu trữ đám mây

Lưu trữ đám mây

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

Sử dụng tính năng này để tạo ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong các thử nghiệm.

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

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

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

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

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

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

Sử dụng điều này để đặt quy tắc cho nhóm lưu trữ của bạn.

Gửi quy tắc đến vùng lưu trữ được quản lý cục bộ. Lấy một đối tượng tùy chọn chỉ định "storageBucket" và "quy tắc" của bạn 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ả các ứng dụng quản trị và thử nghiệm hiện được khởi tạo.

Sử dụng tính năng này để dọn sạch ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động sẽ ngăn không cho 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 điều này để xác nhận rằng việc đọc hoặc ghi bộ 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 điều này để xác nhận rằng bộ lưu trữ đã đọc hoặc ghi thành công:

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

API thư viện RUT cho JS SDK v8

Chọn một sản phẩm để xem các phương pháp được SDK thử nghiệm Firebase sử dụng để giao tiếp với trình mô phỏng.

Cửa hàng đám mây

Cửa hàng đám mây

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

Phương thức này trả về ứng dụng Firebase được khởi tạo tương ứng với ID dự án và biến xác thực được chỉ định trong các tùy chọn. Sử dụng tính năng này để tạo ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong các thử nghiệm.

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ề ứng dụng Firebase của quản trị viên đã 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 đọc và ghi. Sử dụng tính năng này để tạo ứng dụng được xác thực với tư cách quản trị viên nhằm đặt trạng thái cho các thử nghiệm.

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

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

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

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

Phương pháp này gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Nó lấy một đối tượng chỉ định các quy tắc dưới dạng một chuỗi. Sử dụng phương pháp này để đặt 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 điều này để xác nhận nếu cơ sở dữ liệu đọc hoặc ghi không thành cô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 đầu vào thành công và bị từ chối nếu đầu vào bị từ chối. Sử dụng điều này để xác nhận xem 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 pháp này xóa tất cả dữ liệu được 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 pháp này để dọn dẹp sau khi kiểm tra.

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

Cơ sở dữ liệu thời gian thực

Cơ sở dữ liệu thời gian thực

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

Sử dụng tính năng này để tạo ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong các thử nghiệm.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

Trả về ứng dụng firebase 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 tùy 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 điều này để đặt quy tắc cơ sở dữ liệu của bạn.

Gửi quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tùy chọn chỉ định "databaseName" và "quy tắc" của bạn dưới dạng 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 quản trị và thử nghiệm hiện được khởi tạo.

Sử dụng tính năng này để dọn sạch ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động sẽ ngăn không cho 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 điều này để xác nhận rằng việ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 điều này để xác nhận rằng việc đọc hoặc ghi cơ sở dữ liệu thành công:

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

Lưu trữ đám mây

Lưu trữ đám mây

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

Sử dụng tính năng này để tạo ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong các thử nghiệm.

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

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

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

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

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

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

Sử dụng điều này để đặt quy tắc cho nhóm lưu trữ của bạn.

Gửi quy tắc đến vùng lưu trữ được quản lý cục bộ. Lấy một đối tượng tùy chọn chỉ định "storageBucket" và "quy tắc" của bạn 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ả các ứng dụng quản trị và thử nghiệm hiện được khởi tạo.

Sử dụng tính năng này để dọn sạch ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động sẽ ngăn không cho 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 điều này để xác nhận rằng việc đọc hoặc ghi bộ 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 điều này để xác nhận rằng bộ lưu trữ đã đọc hoặc ghi thành công:

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