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

标签 javascript unit-testing tdd bdd 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');
});

});

我做得对,在测试中声明函数本身,或者还有其他方法吗? 如果我做了这样的功能测试,我认为,在源代码中复制实际功能是错误的。也许,有人可以向我展示在模块声明中使用“私有(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/

相关文章:

javascript - 如何设置信用卡到期日期输入字段的样式以包含空格和正斜杠?

Silverlight 单元测试

javascript - Draggable droppable - 掉落时保持原位

javascript - 检查 if 语句内的 boolean 值

java - 如何验证 JUnit 测试中抛出的异常的详细信息?

javascript - 在 Jest 测试中,使用 requireActual 不需要模块的实际版本

ruby-on-rails - RSpec:主页的集成测试

设备通信器的 TDD

c# - 如何 stub 静态方法?

javascript - 切换段落的可见性