我在使用我的全球对象周围的摩卡测试时遇到了大问题。我能够产生下面的MRE,它不会给出完全相同的错误,但是可以举例说明问题(buggy?)行为。任何有识之士将不胜感激。摩卡全球范围界定问题
我有以下main.js
文件中/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}
。事实上,这是我独立运行每个测试时得到的行为。例如
[email protected]:~/workspace/mocha-test$ mocha test/test2.js
{ third: 3 }
․
1 passing (6ms)
但是,在运行测试都与故宫包时should
和mocha
(1.16.1),我得到下面的输出:
[email protected]:~/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)
我越是看着它,我越是确信这是不受欢迎的行为;在这里发布一个问题:https://github.com/visionmedia/mocha/issues/1083 –
我也遇到过这个问题 - 我认为最好做一个快速的小make文件,每个测试独立运行一个简单的for循环。 –
您的问题可能会被关闭 - 我认为有一个类似的问题。用户希望清除require cache。 https://github.com/visionmedia/mocha/issues/536 –