Я использую mocha для проверки функции в файле. Проверяемая функция реализована следующим образом:Ошибка Mocha с переменной не определена
math.js
(function (exports) {
var MY_APP_ = MY_APP || {};
MY_APP_.utils = MY_APP_.utils || {};
MY_APP_.utils.math = MY_APP_.utils.math || {};
MY_APP_.utils.math.randomValue = function (min, max) {
return Math.floor(Math.random() * (max + 1 - min) + min);
};
exports.math = MY_APP_.utils.math;
})(this);
А вот тест: math_test.js
var assert = require("assert");
var math = require("../../js/utils/math.js");
describe('Math', function() {
describe('randomValue', function() {
it('should return random values', function() {
// Fill array with random values between 0 and 10
var values = [];
for (var i = 0; i < 10000; i++) {
values.push(math.math.randomValue(0, 10));
}
// Count numbers
var result = {};
values.forEach(function(number) {
var numberAsString = number.toString();
result[numberAsString] = result[numberAsString] + 1 || 1;
});
// There must be at least two of each number
assert.equal(Object.keys(result).length, 11);
Object.keys(result).forEach(function(key) {
assert.equal(true, result[key] > 1);
});
});
});
});
Проблема заключается в том, что var MY_APP_ = MY_APP || {};
терпит неудачу с сообщением об ошибке: MY_APP не определен.
Несомненно, MY_APP не определяется в рамках данного теста, поскольку он определен в другом файле с именем app.js. Когда я создаю приложение, этот файл app.js включен перед math.js, и оба они объединены в один файл production.js. Это работает без проблем.
тест работает, однако, если я заменю неудовлетворительную строку со следующим:
var MY_APP = {};
if (typeof(MY_APP) !== 'undefined') {
MY_APP_ = MY_APP;
} else {
MY_APP_ = {};
}
Это выглядит глупо на мой взгляд. Я хотел бы знать причину, по которой mocha терпит неудачу, поскольку код работает отлично, когда я запускаю его в браузере.
EDIT: Я думаю, что совершил ошибку. var MY_APP_ = MY_APP || {};
, похоже, никогда не работает, если MY_APP не определен, поэтому единственным вариантом является объявление MY_APP перед использованием math.js
Кажется, вы предоставляя свой собственный ответ: «Когда я создаю приложение, этот app.js включен перед math.js» _. Другими словами, 'math.js' зависит от' app.js'. – robertklep
Да, но требование app.js в тесте не решает проблему. – Jarzka