Вопросы Глобального Охвата Мокко
у меня большая проблема с моими тестами мокко вокруг глобального объекта, который я использую. Я могу создать следующий MRE, который не дает точно такую же ошибку, но иллюстрирует проблематичность (багги?) поведение. Любое понимание будет высоко ценится.
у меня есть следующие на /lib
:
exports.exec = function(){
console.log(test);
}
Затем следующее /test/test.js
:
var should = require('should');
var main = require('../lib/main');
global.test = {something: 1};
describe('normal test', function(){
beforeEach(function(){
global.test = {another: 2};
}),
afterEach(function(){
delete global.test;
});
it ('might work with global', function(){
main.exec();
})
});
наконец, это test/test2.js
:
var should = require('should');
var main = require('../lib/main');
global.test = {third: 3};
describe('some test', function(){
it ('messes up global', function(){
main.exec();
})
});
Я ожидаю, что первый тест выводит {another:2}
а второй напечатал бы {third: 3}
. Действительно, это поведение я получаю, когда я запускаю каждый тест независимо. например,
jeff@ubuntu:~/workspace/mocha-test$ mocha test/test2.js
{ third: 3 }
․
1 passing (6ms)
однако при запуске обоих тестов с пакетами npm should
и mocha
(1.16.1), я получаю следующий вывод:
jeff@ubuntu:~/workspace/mocha-test$ mocha
{ another: 2 }
․․
1 passing (6ms)
1 failing
1) some test messes up global:
ReferenceError: test is not defined
at Object.exports.exec (/home/jeff/workspace/mocha-test/lib/main.js:3:15)
at Context.<anonymous> (/home/jeff/workspace/mocha-test/test/test2.js:8:10)
at Test.Runnable.run (/usr/lib/node_modules/mocha/lib/runnable.js:211:32)
at Runner.runTest (/usr/lib/node_modules/mocha/lib/runner.js:355:10)
at /usr/lib/node_modules/mocha/lib/runner.js:401:12
at next (/usr/lib/node_modules/mocha/lib/runner.js:281:14)
at /usr/lib/node_modules/mocha/lib/runner.js:290:7
at next (/usr/lib/node_modules/mocha/lib/runner.js:234:23)
at Object._onImmediate (/usr/lib/node_modules/mocha/lib/runner.js:258:5)
at processImmediate [as _immediateCallback] (timers.js:330:15)
1 ответов
test2.js
должно быть структурировано следующим образом:
describe('some test', function(){
before(function (){
global.test = {third: 3};
});
it ('messes up global', function(){
main.exec();
})
});
travisjeffery по вопросу GitHub, упомянутому в комментарии, объясняет:
mocha загружает файлы, а затем запускает комплекты, чтобы надежно настроить тесты, установка должна быть в комплекте.
как указывает @SB, это может не поддаваться обмену такими вещами, как глобальные переменные, между тестами.