我在JavaScript文件中有一个自调用函数。像这样:
com.renderer = (function(){
render(data){
}
.....other functions
return{
init : function(){
$(document).ready(function(){
jsonData = fetchFromServer();
render(jsonData);
});
}
}
})().init();
我正在考虑如何对此进行单元测试。我正在使用JSUnitTestDriver。如果我能以某种方式从外部向渲染函数注入jsonData
,那就不错了,但这对我来说似乎是不可能的。
有任何建议或替代方案吗?
我真的不想删除该函数的自调用性质。为了单元测试,改变我认为好的设计真的有意义吗? (在这种特殊情况下,不是一般情况。)
注意:运行测试时我无法与服务器通信。
答案 0 :(得分:1)
问题在于你正试图对单身人士进行单元测试,而单身人士通常不被认为是好的设计。
相反,我会考虑以下内容:
function createRenderer(dataFetcher) {
function render(data) {
}
// other functions
return {
init: function () {
$(document).ready(function () {
jsonData = dataFetcher();
render(jsonData);
});
}
};
}
// in your production code
com.renderer = createRenderer(fetchFromServer);
com.renderer.init();
// in your unit test
var renderer = createRenderer(function () {
return { test: "data" };
});
renderer.init();
// run your tests against renderer.
这使用了一种称为依赖注入的技术,其中将获取JSON数据的依赖注入到渲染器中,从而将该责任分离出去。