在 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 语句结果很好。但它说 parserJson
和 stringifyJson
没有定义或发现实际上已经加载了。
不是吗?
仅仅在函数内声明一个变量是不够的,您需要 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');
在这里,我在 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 语句结果很好。但它说 parserJson
和 stringifyJson
没有定义或发现实际上已经加载了。
不是吗?
仅仅在函数内声明一个变量是不够的,您需要 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');