gpt4 book ai didi

node.js - 有没有办法在不暴露函数的情况下使用 Jasmine 测试函数?

转载 作者:搜寻专家 更新时间:2023-11-01 00:19:26 27 4
gpt4 key购买 nike

我有一个包含一些通用实用函数的 utils.js 文件。我使用 module.exports 来公开一些功能,同时隐藏其余功能。

module.exports = {
utils_1: function_1,
utils_2: function_2
};

假设还有其他函数,即 function_3function_4 我不想公开,但我想用 Jasmine 进行测试。我目前能做到的唯一方法是将它们与其余功能一起公开,然后像往常一样编写我的测试套件。

有没有办法在不公开的情况下通过 Jasmine 测试某些功能?

我唯一能想到的是创建一个包含(并公开)function_3function_4 的不同 javascript 文件,在我的 utils.js 中需要该文件 并同时使用 Jasmine 测试新文件,但这会将我的原始文件一分为二(这同样适用于所有其他类似文件)。

最佳答案

function_3function_4function_1function_2 中使用,对吗?那么,你真的需要对它进行单元测试吗?我不会。但其他人的想法可能恰恰相反。

这是我的例子

// utils.js
function function_3(obj) {
obj.a = 3;
return obj;
}

function function_4(obj) {
obj = function_3(obj); // invoke function_3
obj.b = 4;
return obj;
}
module.exports = { utils_4: function_4 };

测试:

const { utils_4 } = require('utils');

describe('test 1', () => {
it('should pass', () => {
const obj = utils_4 ({});

expect(obj.a).toBeDefined();
expect(obj.a).toEqual(3);

expect(obj.b).toBeDefined();
expect(obj.b).toEqual(4);
});
});

它应该通过,对吧?请注意,我只测试了 function_4,但是,如果我以阻止测试的方式更改 function_3 的实现,测试将检测到它。

如果我们将 function_3 更改为

function function_3(obj) {
obj.c = 3;
return obj;
}

测试会失败。

这是一个糟糕的例子,但它只是说明性的。充分利用它。但同样,其他人可能会认为相反,并会采用直接测试 function_3 的方法。使用覆盖率库查看测试覆盖的内容。

希望对你有帮助

关于node.js - 有没有办法在不暴露函数的情况下使用 Jasmine 测试函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57251243/

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