gpt4 book ai didi

javascript - 如何使用 Jasmine 测试内部目的所需的内部功能

转载 作者:行者123 更新时间:2023-11-29 19:59:08 27 4
gpt4 key购买 nike

(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');
});

});

我这样做是对的,在测试中声明函数本身,还是有其他方法?如果我这样做了功能测试,我认为,在源代码中复制实际功能是错误的。也许有人可以告诉我在模块声明中使用“私有(private)”函数的正确情况

最佳答案

我同意 Andy Waite 的观点:一般来说,您应该只测试公共(public)接口(interface)方法。

但是,如果你认为这个私有(private)方法真的需要直接测试,这可能是一个问题的征兆。听起来这种方法做的工作太多了(或者至少是你认为重要的工作)。如果是这种情况,请考虑将其逻辑提取到服务对象中并委托(delegate)给它。这样可以很容易地单独测试服务对象。

编辑:

在代码中:

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(){ ... });
});

关于javascript - 如何使用 Jasmine 测试内部目的所需的内部功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15248636/

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