node.js - 有没有办法用 Jasmine 测试功能而不暴露它们?
问题描述
我有一个utils.js
包含一些通用实用程序功能的文件。我module.exports
习惯于公开一些功能,而将其余功能隐藏起来。
module.exports = {
utils_1: function_1,
utils_2: function_2
};
假设还有其他功能,即function_3
我function_4
不想公开,但我想用 Jasmine 进行测试。我目前能做到的唯一方法是用其余的功能公开它们并像往常一样编写我的测试套件。
有没有办法通过 Jasmine 测试某些功能而不暴露它们?
我唯一能想到的是创建一个不同的 javascript 文件,其中包含(和公开)function_3
和function_4
,要求在我的文件中utils.js
同时使用 Jasmine 测试新文件,但这会将我的原始文件一分为二(并且相同将适用于所有其他类似文件)。
解决方案
function_3
andfunction_4
里面使用function_1
and function_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);
});
});
应该会过去的吧?看到我只 test function_4
,但是,如果我function_3
以某种方式改变了我的测试的实现,测试会检测到它。
如果我们function_3
改为
function function_3(obj) {
obj.c = 3;
return obj;
}
测试将失败。
这是一个糟糕的例子,但它只是说明性的。把它的好部分。但同样,其他人可能会有相反的想法,并会采用function_3
直接测试的方法。使用覆盖库来查看测试覆盖的内容。
希望能帮助到你
推荐阅读
- javascript - 异步等待 Firebase 云函数在包含三个等待行时超时
- android - 在 Ionic 4 中将 PDF 保存到设备
- java - `var x` 和 `int x` 之间有什么区别吗?
- r - 将 Bloomberg Rblpapi 更改为累积数据
- javascript - 使用按钮选择选择选项
- twilio - Twilio API Stats 调用以检索代理平均/最大/总保持时间?
- elasticsearch - Elasticsearch - 按价格和日期进行范围搜索不起作用
- regex - 如何使用查询来过滤不应包含来自不同范围的任何单词的范围?
- list - 寻找高度
- plot - 在 gnuplot 中绘制 2D 颜色图