Jest 对同一字符串失败

Jest fails for same string

我第一次在个人项目上尝试使用 Jest 进行单元测试,尽管收到的数据与预期的完全相同,但我的一些测试还是失败了,这是一个例子:

test("decrypt method works correctly", () =>{
    const myAES = new rijndael("", "0bdfa595235c307a105d593fb78fbb13", { key: "SOME 128 BIT KEY", bits: 128, rounds: 9 })
    expect(myAES.decrypt()).toStrictEqual({
        "c": "0bdfa595235c307a105d593fb78fbb13",
        "p": "ATTACK AT DAWN!",
        "errors": []
    })
}

然后我尝试检查 Jest 或我的代码是否有问题:

const r = myAES.decrypt()
console.log(typeof r.p) // string
console.log(r.p === "ATTACK AT DAWN!") // false

这让我更加困惑,因为字符串看起来一样。我正在测试的代码是一个 AES 加密函数(别担心,这只是一个个人项目,不会用于生产),它将文本处理为 nodeJS Buffers, and in the end uses the toString() 方法以将其转换回字符串.我在想这可能就是我遇到问题的原因,但似乎无法找到确切原因。如果有人能指出正确的方向,我会很高兴,这样我就可以摆脱这个错误。提前谢谢你。

P.S。现在我会为大家省去阅读我的 AES 实现的痛苦,因为我认为这不是加密的问题,但如果有必要请告诉我

好的,事实证明这是一个愚蠢的错误,我忽略了解密后往往会出现在缓冲区末尾的一系列空字节。虽然 toString() 会将缓冲区转换为我想要的字符串,但计算机不会将其识别为相同的字符串。所以我所要做的就是去掉后面的空字节。假设空字节应该像往常一样只出现在字符串的末尾:

const i = buffer.indexOf(0x00)
const result = buffer.slice(0, i).toString() //solves the problem