Javascript 如何正确导出node.js模块中的变量,使其在单元测试中可见

Javascript 如何正确导出node.js模块中的变量,使其在单元测试中可见,javascript,node.js,unit-testing,mocha.js,Javascript,Node.js,Unit Testing,Mocha.js,我正在尝试单元测试node.js模块,我想知道如何正确导出变量和对象?因此,我可以在单元测试中访问它们并处理它们 源代码: var someObject = {}; var Array = [189, 347, 497, 632, 750, 900, 995, 1137], someNumber = 142, sizeOfArray = Allowance.length; someObject = { method1 : function (info) {

我正在尝试单元测试node.js模块,我想知道如何正确导出变量和对象?因此,我可以在单元测试中访问它们并处理它们

源代码:

var someObject = {};

var Array = [189, 347, 497, 632, 750, 900, 995, 1137],
    someNumber = 142,
    sizeOfArray = Allowance.length; 

someObject = { 

    method1 : function (info) {
         //something...
         return {
             someOtherMethod1: someObject.method1(info) && someObject.method2(info)
             someOtherMethod2: someObject.method3(info)
         };
    },

    method2 : function (info) {
        //something...

        return something2;
    } 

    method3 : function (info) {
        //something...

        return something3;
    }
};

module.exports = someObject;
这样做:

module.exports = someObject;
我可以在mocha中访问单元测试文件中的someObject,但如何访问其他变量,如Array、sizeOfArray和someNumber

我尝试添加以下内容:

module.exports = {

      someObject  : someObject,
      Array       : Array,
      someNumber  : someNumber,
      sizeOfArray : sizeOfArray
};
但是我的单元测试文件无法读取它

编辑:

这是我的单元测试

@奥古斯托

这就是我所说的测试方法1

it("should return positive when conditions are met", function() {

        var result = sourceCode.someObject.method1(Info);

        expect(result).not.to.be.undefined;
        expect(result.eligible).not.to.be.undefined;
        expect(sourceCode.result.someOtherMethod2).not.to.be.undefined;

        expect(sourceCode.result.someOtherMethod1).to.equal(true);
}); 

我认为问题在于单元测试。您没有访问对象中的属性

var sourceCode = require('../src/sourceCode');

//CODE CODE CODE

expect(Array).not.to.be.undefined; 
您试图访问的是数组变量,而不是sourceCode.Array属性。由于没有定义数组变量,因此会收到未定义的错误消息。正确的代码应该是:

expect(sourceCode.Array).not.to.be.undefined; 
所以。。在单元测试中,请尝试以下操作:

var assert = require("assert") 
var expect = require("expect.js") 
var chai   = require("chai")  

var sourceCode = require('../src/sourceCode') 


  describe("Something..", function() { 

      var Info = { 
        //some data...
      };


      describe("Properties", function() { 

          it("has someObject defined", function() {
            expect(sourceCode.someObject).not.to.be.undefined; 
          });

          it("has Array defined", function() {
            expect(sourceCode.Array).not.to.be.undefined; 
          });

          it("has someNumber defined", function() {
            expect(sourceCode.someNumber).not.to.be.undefined; 
          });

          it("has sizeOfArray defined", function() {
            expect(sourceCode.sizeOfArray).not.to.be.undefined; 
          })

        })
    };

这个代码会起作用的。向我们展示你的单元测试。它告诉我所有这些变量都是未定义的…这意味着它们不能被访问。我不明白我做了你指定的事情,变量现在起作用了,但是某个对象的方法仍然不起作用…我做的方法正确吗?你是想测试方法是否未定义或方法的返回值是否未定义?。。。因为如果您想使用第一个选项,那么您应该使用expect(sourceCode.someObject.method1);这正是我正在做的,但我已经给了它参数,我在测试中自己做的。我试图验证这些方法的存在性。我希望它们不是未定义的。我把它添加到我原来的问题中。摩卡抱怨说它不认识这些方法,这太奇怪了,我知道我可能犯了一些愚蠢的错误,我没有看到,但以上帝的名义,这可能是什么…嗯。。。好吧,如果是这样的话,那么我可以从你的代码中看到,你正在做“expect(sourceCode.someObject.method1(Info)).not.to.be.undefined;“when you应该做”expect(sourceCode.someObject.method1).not.to.be.undefined;“你修正了!!非常感谢。如果说……我在源代码中添加了另一个方法,我可以做些什么来测试它,比如测试该方法在满足条件时是否返回true(“满足条件时应返回正值”,function(){varresult=sourceCode.someObject.method1(Info);expect(result).not.to.be.undefined;expect(result.qualified).not.to.be.undefined;expect(sourceCode.result.someOtherMethod2).not.to.be.undefined;expect(sourceCode.result.someOtherMethod1).to.equal(true);})----对不起,我在我的原始问题中添加了这个,这样你可以看到它的格式正确
var assert = require("assert") 
var expect = require("expect.js") 
var chai   = require("chai")  

var sourceCode = require('../src/sourceCode') 


  describe("Something..", function() { 

      var Info = { 
        //some data...
      };


      describe("Properties", function() { 

          it("has someObject defined", function() {
            expect(sourceCode.someObject).not.to.be.undefined; 
          });

          it("has Array defined", function() {
            expect(sourceCode.Array).not.to.be.undefined; 
          });

          it("has someNumber defined", function() {
            expect(sourceCode.someNumber).not.to.be.undefined; 
          });

          it("has sizeOfArray defined", function() {
            expect(sourceCode.sizeOfArray).not.to.be.undefined; 
          })

        })
    };