javascript - 如何测试主函数内部定义的私有函数?
问题描述
主要问题是如何测试主函数内部定义的私有函数?有什么方法可以测试结构中的函数(测试主函数内部定义的函数)?
主.js:
function main (var1) {
var a;
//some variables
configure(getConfig());
function getConfig() {
var config = {//some object...
};
return config;
}
function configure(config) {
//do somethings;
}
function getSyncRates() {
return syncrates;
}
this.getSyncRates = getSyncRates;//public not waht we want
}
module.exports=(var1)=>{return new main(var1)};
测试.js
var main=require("../js/main");
var x=main(var1).getConfig();
describe("main",function(){
describe("getconfig",function(){
it("getconfig return config",function(){
assert.equal(x,config);
});
});
});
这导致:
结果 (...).getConfig 不是函数
解决方案
这是一个模块设计主题。模块具有公共和私有功能。现在,根据定义,这个模块的消费者只会知道公共的。这就是为什么您只想拥有调用公共函数的测试用例。
私有函数通常是有助于增加模块凝聚力的操作的抽象。简而言之,它们是可能会或可能不会更改的实现细节,并且通常不会更改模块的公共 API(即公共函数接口)。
等什么?所以我应该让那些线不被发现吗?
不,当然不是。您应该通过公共功能测试私有功能。所以你不会有一个直接调用私有函数的测试用例。您将对公共函数进行测试,传递参数,使代码执行通过这些私有函数。
这样,您的测试反映了其他组件将使用您的模块的方式。它们还将为模块提供良好的实用文档。
// test.js
var createMain = require("../js/main");
describe('main module', function() {
describe('getSyncRates()', function() {
it('returns the sync rates', function() {
// Arrange
const myFirstInput = 'foo';
// Act
const main = createMain(myFirstInput);
const rates = main.getSyncRates()
// Assert
assert.equals(30, rates); // assuming we were expecting for the rates to be 30, when we pass 'foo' as the input
});
});
});
推荐阅读
- scala - Spark SparkOutOfMemoryError 尽管每个任务的内存都大于输入
- angular - Angular 6 - 从下拉列表中默认选择的选项
- xamarin.forms - 网格 xamarin 形式中的重叠框架
- reactjs - 如何使用 laravel echo 和 react js?
- unity3d - Unity 网络在哪里?
- shell - Makefile forloop break 语句中的问题
- python - 即使使用 inplace=True,pandas replace 也不会替换值
- java - 为 Spring 验证框架自定义验证器
- reactjs - 如何使用来自 api 的 redux 获取数据?
- html - 我希望我的 div 的边界完全重叠,但是当我将它们与 flex 对齐时会变得奇怪