【发布时间】:2021-07-02 11:39:39
【问题描述】:
我在一个个人项目中第一次尝试使用 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,最后使用 toString()方法将其转换回字符串。我在想这可能是我遇到问题的原因,但似乎无法找到确切的原因。如果有人能指出我正确的方向,我会很高兴,这样我就可以摆脱这个错误。提前谢谢你。
附:我会为大家省去现在阅读我的 AES 实现的痛苦,因为我认为加密不是问题,但如果有必要请告诉我
【问题讨论】:
-
不确定'p'元素是错误的,你检查过完整的结构吗,因为strictEquals意味着一切都必须匹配。
-
能否将两者都转换为十六进制,看看两者之间是否有区别。使用可以使用此示例将字符串转储为十六进制
<string>.split('').reduce((h,c)=>h+=c.charCodeAt(0).toString(16).padStart(2,'0'),'') -
哦,对了,我早该想到的!我会试一试,谢谢:)
标签: node.js string jestjs buffer