gpt4 book ai didi

javascript - 如何测试一个调用另一个函数的函数?

转载 作者:行者123 更新时间:2023-12-05 03:49:35 24 4
gpt4 key购买 nike

我有一个函数可以将 8 位整数数组转换为 x 位整数。这个函数在 Jest 中有大量的单元测试。此函数称为 convertArrayIntoInt()

我有另一个依赖于 convertArrayIntoInt() 的函数,称为 getSignature()

/**
* @param {Uint8Array} fileContents The file contents
* @param {number} position The position in the file where the signature is.
* @return {number} the 32 bit signature
*/
function getSignature(fileContents, position) {
let signature = fileContents.slice(position, position + 4);
signature = convertArrayIntoInt(signature);
for(let s in Enums.Signatures) {
if(signature === parseInt(s)) {
return signature;
}
}
return Enums.Signatures.BAD_SIGNATURE;
}

我想为此函数编写一个测试,测试 Uint8Array.of(0x04, 0x03, 0x4b, 0x50), 0) 是否返回 0x04034b50枚举.BAD_SIGNATURE。我听说通过单元测试,您不想测试依赖于另一个函数输出的函数。我如何在 Jest 中执行此操作?

最佳答案

更新:当我将不同的文件合并到一个文件中时,我的原始响应似乎出现了一些问题我希望它能像以前一样工作,但它没有 因此请确保将要注入(inject)的函数放入单独的文件中。

如前所述,单元测试应该在模拟依赖项时测试它自身的功能。

我将函数移到单独的文件中,在一个文件中定义了所有函数并在另一个测试中。

枚举.js

export const Enums = {
Signatures: {
SIGNATURE_1: 1,
SIGNATURE_2: 2,
SIGNATURE_3: 3,
BAD_SIGNATURE: -1
}
};

convertArrayIntoInt.js

export function convertArrayIntoInt(array) {
// processing...
return array.length;
}

getSignature.js

import { convertArrayIntoInt } from "./convertArrayIntoInt";
import { Enums } from "./enums";

export const getSignature = (fileContents, position) => {
let signature = convertArrayIntoInt(
fileContents.slice(position, position + 4)
);

for (let s in Enums.Signatures) {
if (signature === parseInt(s, 10)) {
return signature;
}
}

return signature;
};

tests.spec.js

import { getSignature } from "./getSignature";
import { Enums } from "./enums";
import * as convertArrayIntoIntModule from "./convertArrayIntoInt";

it("Function check", () => {
// arrange
const spy = jest.spyOn(convertArrayIntoIntModule, "convertArrayIntoInt");
spy.mockReturnValue(Enums.Signatures.SIGNATURE_1);

// act
const expected = Enums.Signatures.SIGNATURE_1;
const actual = getSignature([1, 2, 3, 4, 5, 6], 1);

// assert
expect(spy).toBeCalledTimes(1);
expect(actual).toEqual(expected);

// clean up
spy.mockRestore();
});

可以看看this sandbox我创建的是为了测试类似于您的虚拟函数。

关于javascript - 如何测试一个调用另一个函数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63872226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com