错误:concatUint8Array:数据必须采用 Uint8Array 的形式

问题描述

我正在使用 Jest 来测试我的一个使用 OpenPGP.js https://openpgpjs.org/(最新版本,4.10.9)的小函数

我看到了一些使用库 text-encoding-utf-8解决方法,并且我在测试中这样做了,但不幸的是,错误仍然存​​在。

即使有:

const textEncoding = await import("text-encoding-utf-8")
global.TextEncoder = textEncoding.TextEncoder
global.TextDecoder = textEncoding.TextDecoder

我的功能

import * as openpgp from "openpgp"

export async function decryptMessage(privateKeyArmored,passphrase,message) {
  const {
    keys: [privateKey],} = await openpgp.key.readArmored(privateKeyArmored)

  await privateKey.decrypt(passphrase)

  const { data } = await openpgp.decrypt({
    message: await openpgp.message.readArmored(message),privateKeys: [privateKey],})

  return data
}

这是我的测试

import * as openpgp from "openpgp"

import { decryptMessage } from "../src/crypto"

let privateKey
let publicKey

const passphrase = "password"

const oldTextEncoder = global.TextEncoder
const oldTextDecoder = global.TextDecoder

describe("crypto test suite",() => {
  beforeAll(async () => {
    // workaround to openpgp works with jest
    const textEncoding = await import("text-encoding-utf-8")
    global.TextEncoder = textEncoding.TextEncoder
    global.TextDecoder = textEncoding.TextDecoder

    const { privateKeyArmored,publicKeyArmored } = await openpgp.generateKey({
      userIds: [{ name: "username" }],curve: "ed25519",})

    privateKey = privateKeyArmored
    publicKey = publicKeyArmored
  })

  afterall(() => {
    global.TextEncoder = oldTextEncoder
    global.TextDecoder = oldTextDecoder
  })

  test("decrypt message",async () => {
    const text = "test"

    const { data } = await openpgp.encrypt({
      message: openpgp.message.fromText(text),publicKeys: (await openpgp.key.readArmored(publicKey)).keys,})

    const result = decryptMessage(privateKey,data)

    expect(result).toBe(text)
  })
})

当我跑步时,我得到:

(node:10804) UnhandledPromiseRejectionWarning: Error: concatUint8Array: Data must be in the form of a Uint8Array
(node:10804) 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: 25)

有什么线索吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...