需要帮助在javascript中传递这个简单的mocha测试

时间:2015-06-09 11:09:08

标签: node.js tdd mocha

在这里,我在Javascript中编写了一个简单的实用程序类,用于解析和字符串化Json数据。

//public/js/utilities.js
function UtilitiesClass(){
    var parserJson = function(obj){
        if (typeof(obj) !== "undefined") {
            return JSON.parse(obj);
        };
    }
    var stringifyJson = function(obj){
        if (typeof(obj) !== "undefined") {
            return JSON.stringify(obj);
        };
    }
}

module.exports = UtilitiesClass

然后在我的test.js

require('../public/js/utilities.js');

describe('JS Utilities Classs Tests', function () {
    var jsonObjToStr, strtojsonObj;

    beforeEach(function () {
        this.jsonObjToStr = [1, 2, 3, 4];
        this.strtojsonObj = "[1, 2, 3, 4]";
    });

    it('should parse a string into JSON ', function () {
          expect(parserJson(this.strtojsonObj)).to.not.be.undefined;
    });

    it('should stringify JSON into a string', function () {
        expect(stringifyJson(this.jsonObjToStr)).to.not.be.undefined;
    });

});

然后,当我尝试运行mocha时,我收到了以下错误输出。

andy@LINUXAWCM:~/Projects/Javascript/e-shop-gadgets$ mocha

JS Utilities Classs Tests
      1) should parse a string into JSON 
      2) should stringify JSON into a string


    0 passing (12ms)
    2 failing

    1) JS Utilities Classs Tests should parse a string into JSON :
       ReferenceError: parserJson is not defined
        at Context.<anonymous> (test/test.js:12:18)

    2) JS Utilities Classs Tests should stringify JSON into a string:
       ReferenceError: stringifyJson is not defined
        at Context.<anonymous> (test/test.js:16:16)

为什么这不会起作用? public/js/utilities.js上的require语句很好。但是它说parserJsonstringifyJson在确定已经加载时没有被定义或找到。

不是吗?

1 个答案:

答案 0 :(得分:1)

仅仅声明函数内部的变量是不够的,您需要返回这些变量,因为它们在函数范围之外不可用。

您还要导出一个函数而不是调用它。

同样需要一个文件并不会让你的变量可用于你的范围。

//public/js/utilities.js
function UtilitiesClass(){
    var parserJson = function(obj){
        if (typeof(obj) !== "undefined") {
            return JSON.parse(obj);
        };
    }
    var stringifyJson = function(obj){
        if (typeof(obj) !== "undefined") {
            return JSON.stringify(obj);
        };
    }
    return {
        parserJson: parserJson,
        stringifyJson: stringifyJson
    };
}

module.exports = UtilitiesClass;
var util = require('../public/js/utilities.js')();

util.parserJson(...) //etc

虽然您可能不需要导出函数,但只需要每种方法。

//public/js/utilities.js
var parserJson = function(obj){
    if (typeof(obj) !== "undefined") {
        return JSON.parse(obj);
    };
}
var stringifyJson = function(obj){
    if (typeof(obj) !== "undefined") {
        return JSON.stringify(obj);
    };
}

module.exports = {
    parserJson: parserJson,
    stringifyJson: stringifyJson
};

然后你会用

var utils = require('../public/js/utilities.js');