如何使用Jasmine测试内部功能,这些功能用于内部目的
How to test internal functions, which are needed for internal purposes, using Jasmine
(function(window,document){
var _trimString = function( string ){
var trimString;
trimString = string.replace(/^'s+|'s+$/g,'');
return trimString
};
var displayCorrectText = function( incorrecttext ){
correctText = "."+incorrecttext;
document.write( correctText );
}
var Circular = function(){};
Circular.prototype.init = function( string ){
displayCorrectText( _trimString( string ) );
};
var circular = new Circular();
window.circular = circular;
})(window,document);
circular.init('asd.asd');
我有这个模块声明,我想使用Jasmine测试_trimString函数。
我写了如下代码
describe("Form Creator private function ", function(){
it("_trimString should trim string", function(){
var _trimString = function( string ){
var trimString;
trimString = string.replace(/^'s+|'s+$/g,'');
return trimString
};
expect(_trimString(' test text ') ).toBe('test text');
});
});
我做得对,在测试中声明函数本身,或者有其他方法吗?如果我这样做的功能测试,我认为,错误的复制实际功能的源代码。也许,有人可以告诉我在模块声明中使用"私有"函数的正确情况
我同意Andy Waite的观点:一般来说,你应该只测试公共接口方法。
然而,如果您认为这个私有方法确实需要直接测试,这可能是一个问题的症状。这种方法似乎做了太多的工作(或者至少是一些您认为重要的工作)。如果是这种情况,请考虑将其逻辑提取到服务对象中并委托给它。这样就很容易单独测试服务对象。
编辑:在代码:
var Circular = function(){
this.trimmer = new Trimmer();
};
Circular.prototype.init = function( string ){
this.displayText = this.trimmer.trim( string );
};
var circular = new Circular();
circular.init(" test ").displayText // should be trimmed
...
// test trimmer separately
describe("Trimmer", function(){
it("trims string", function(){ ... });
});
一般情况下,您应该只测试公共接口方法。
你的初始化器正在调用_trimString
,所以你可以通过它隐式地测试它。
it("trims whitespace"), function(){
var circular = Circular.new(' foo ')
expect(circular.text).toBe('foo')
}
您可能需要重构一些现有的代码以使其更易于测试。displayCorrectText
目前有两个不同的职责——操作某个字符串和打印结果,这违反了单一职责原则。
相关文章:
- 需要原型内部或外部的功能
- 数组长度 内部功能不同
- 角度控制器功能不;在指令内部调用时,似乎无法始终如一地工作
- 访问内部功能范围的元素,而不是敲除中的外部
- AngularJS控制器内部的功能
- 重用if语句中的代码.(功能内部的功能是不良做法吗?)
- javascript:“;这个“;在内部功能中
- 在 velocit 内部的功能.js序列
- 节点:需要模块内部功能
- Javascript:在内部站点中添加搜索功能
- JavaScript while 循环不执行内部功能
- ES2015导出内部功能
- 使用AndroidDriver运行内部功能测试
- 无法运行内部功能测试.错误:[POST http://localhost:4444/wd/hub/session] co
- 清除标记基于缩放,内部功能
- JQuery弹出$.后内部功能不工作
- 如何使用Jasmine测试内部功能,这些功能用于内部目的
- Durandal小部件的内部功能范围和上下文
- 如何在内部功能测试中使用dijit/ registry ?
- JQuery显示隐藏Div命令的内部功能