JavaScript测试一个简单的模块

时间:2014-05-26 21:31:26

标签: javascript node.js jasmine

我是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);
  });
});

1 个答案:

答案 0 :(得分:0)

在spec文件中,stringCalc变量被重新定义,以保存从calc.js文件中导出的任何内容。您的代码模块(calc文件)不会导出任何内容,因此您需要它的东西没有添加方法。您可以通过在测试文件中记录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;
  }
})();
相关问题