FIRESTORE (7.14.3) INTERNAL ASSERTION FAILED: value must be undefined or Uint8Array.

问题描述 投票:1回答:1

我的脚本一直在引发这个错误,我写的代码是为了测试Firestore的安全规则。我写的代码是为了测试Firestore的安全规则,我基本上想测试我的Firestore的安全性,同时添加javascript功能。它是可以写在firestore控制台的规则,并保存它们,然后和那里,但我想使用IDE - VS代码。

我想知道如何解决 "FIRESTORE (7.14.3) INTERNAL ASSERTION FAILED: value must be undefined or Uint8Array"。 我更新了我的npm,也尝试了一个我在Github上找到的答案,它说让我先安装 "npm i jest-environment-uint8array"。但没有成功。我也试过使用 "TextEncoder",比如: var uint8array = new TextEncoder("utf-8").encode("Posts"); var string = new TextDecoder("utf-8").decode(uint8array);这也不行。如果你们能彻底回答我,我会非常感激,因为我只是个新手。

我的测试代码是

const { setup, teardown } = require("./helpers");

describe("General Safety Rules", () => {
  afterEach(async () => {
    await teardown();
  });

  test("should deny a read to the posts collection", async () => {
    const db = await setup();
    const postsRef = db.collection("Posts");
    await expect(postsRef.get()).toDeny();
  });

});

我的helper js基本都有设置,当我的代码完成后的拆解。

const firebase = require("@firebase/testing");
const fs = require("fs");

module.exports.setup = async (auth, data) => {
  const projectId = `rules-spec-${Date.now()}`;

  const app = firebase.initializeTestApp({
    projectId,
    auth
  });

  const db = app.firestore();

  // Apply the test rules so we can write documents
  await firebase.loadFirestoreRules({
    projectId,
    rules: fs.readFileSync("firestore-test.rules", "utf8")
  });

  // write mock documents if any
  if (data) {
    for (const key in data) {
      const ref = db.doc(key); // This means the key should point directly to a document
      await ref.set(data[key]);
    }
  }

  // Apply the actual rules for the project
  await firebase.loadFirestoreRules({
    projectId,
    rules: fs.readFileSync("firestore.rules", "utf8")
  });

  return db;
};

module.exports.teardown = async () => {
  // Delete all apps currently running in the firebase simulated environment
  Promise.all(firebase.apps().map(app => app.delete()));
};

错误是

jest .spec

(node:8200) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1)
 FAIL  spec/collections.spec.js (10.284 s)
  General Safety Rules
    × should deny a read to the posts collection (4598 ms)
    × should deny a write to users even when logged in (131 ms)

  ● General Safety Rules › should deny a read to the posts collection

    FIRESTORE (7.14.3) INTERNAL ASSERTION FAILED: value must be undefined or Uint8Array

      at fail (node_modules/@firebase/firestore/src/util/assert.ts:39:9)
      at hardAssert (node_modules/@firebase/firestore/src/util/assert.ts:53:5)
      at JsonProtoSerializer.fromBytes (node_modules/@firebase/firestore/src/remote/serializer.ts:250:7)
      at JsonProtoSerializer.fromWatchChange (node_modules/@firebase/firestore/src/remote/serializer.ts:431:32)
      at PersistentListenStream.onMessage (node_modules/@firebase/firestore/src/remote/persistent_stream.ts:568:41)
      at node_modules/@firebase/firestore/src/remote/persistent_stream.ts:448:21
      at node_modules/@firebase/firestore/src/remote/persistent_stream.ts:501:18
      at node_modules/@firebase/firestore/src/util/async_queue.ts:358:14

  ● General Safety Rules › should deny a write to users even when logged in

    FIRESTORE (7.14.3) INTERNAL ASSERTION FAILED: value must be undefined or Uint8Array

      at fail (node_modules/@firebase/firestore/src/util/assert.ts:39:9)
      at hardAssert (node_modules/@firebase/firestore/src/util/assert.ts:53:5)
      at JsonProtoSerializer.fromBytes (node_modules/@firebase/firestore/src/remote/serializer.ts:250:7)
      at JsonProtoSerializer.fromWatchChange (node_modules/@firebase/firestore/src/remote/serializer.ts:431:32)
      at PersistentListenStream.onMessage (node_modules/@firebase/firestore/src/remote/persistent_stream.ts:568:41)
      at node_modules/@firebase/firestore/src/remote/persistent_stream.ts:448:21
      at node_modules/@firebase/firestore/src/remote/persistent_stream.ts:501:18
      at node_modules/@firebase/firestore/src/util/async_queue.ts:358:14

  console.error
    [2020-05-20T13:13:11.851Z]  @firebase/firestore: Firestore (7.14.3): FIRESTORE (7.14.3) INTERNAL ASSERTION FAILED: value must be undefined or Uint8Array

      at Logger.defaultLogHandler [as _logHandler] (node_modules/@firebase/logger/src/logger.ts:115:57)
      at logError (node_modules/@firebase/firestore/src/util/log.ts:45:20)
      at fail (node_modules/@firebase/firestore/src/util/assert.ts:34:3)
      at hardAssert (node_modules/@firebase/firestore/src/util/assert.ts:53:5)
      at JsonProtoSerializer.fromBytes (node_modules/@firebase/firestore/src/remote/serializer.ts:250:7)
      at JsonProtoSerializer.fromWatchChange (node_modules/@firebase/firestore/src/remote/serializer.ts:431:32)

Test Suites: 1 failed, 1 total
Tests:       2 failed, 2 total
Snapshots:   0 total
Time:        18.711 s
Ran all test suites matching /.\\spec/i.
(node:8200) UnhandledPromiseRejectionWarning: FirebaseError: Caught error after test environment was torn down

The client has already been terminated.
(node:8200) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 3)
(node:8200) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Jest did not exit one second after the test run has completed.

This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
javascript node.js flutter google-cloud-firestore firebase-security
1个回答
3
投票

这似乎是一个兼容性问题之间的最新的 @firebase/[email protected] 版本和内部使用的 [email protected] 版本。我也遇到了同样的错误,用临时的变通方法解决了。

试着降级你的 @firebase/testing 版本为 ^0.15.0 经过快速的 npm i 它为我工作。你仍然可以升级到最新版本以后,只要他们修复当前的兼容性问题。

一旦发生这种情况,我会尽快更新我的答案。

更新了。这是我在 firebase-js-sdk GitHub 页面上创建的问题。https:/github.comfirebasefirebase-js-sdkissues3096。.

似乎与测试框架Jest中的一个bug有关。这个问题描述了一个不需要降级的解决方法。

一旦不需要这个解决方法了,我会尽快更新我的回答。


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.