在 javascript 中需要帮助才能通过这个简单的 mocha 测试

Need help in passing this simple mocha test in javascript

在这里,我在 Javascript 中编写了一个简单的实用程序 class,用于解析和字符串化 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 没有定义或发现实际上已经加载了。

不是吗?

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

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

同样需要一个文件并不能神奇地使您的变量可用于您的范围。

//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');