JavaScript测试一个简单模块

JavaScript Testing a Simple Module

本文关键字:一个 简单 模块 测试 JavaScript      更新时间:2023-09-26

我是JavaScript的新手,我试图理解为什么Jasmine-Node告诉我stringCalc在明确定义时没有方法add。是添加不附加到对象,还是有一些东西,我错过了,只要需要生产文件?

代码:

var stringCalc = (function() {
  return {                                                                          
    add: function(string) {                                                                                                                                              
      return 0;
    }
  };
})();

规范:

var stringCalc = require("../lib/calc");
describe("String Calculator", function() {
  it("should return zero if empty", function() {
    expect(stringCalc.add("")).toEqual(0);
  });
});

在spec文件中,stringCalc变量被重新定义为保存从calc.js文件导出的任何内容。您的代码模块(calc文件)不导出任何东西,因此您通过要求它得到的东西没有add方法。您可以通过在测试文件中记录require语句的结果来看到这一点:

var stringCalc = require("./calc");
console.log(stringCalc);

将这个写入控制台:

{}

要使代码模块中的内容可用,必须导出它们。有几种方法可以做到这一点,例如:

exports.add = function(string) {
  return 0;
}
有了这些代码,测试就像您写的那样通过了。如果你想把它包装在一个自动执行的函数中,这样就不会弄乱全局作用域,你只需要把整个东西包装起来:
(function() {
  // private code here; this stuff is not exported
  var s = 'foo';
  var helperFunction = function() { 
    // ...
  }
  exports.add = function(string) {
    return 0;
  }
})();