我知道全局变量很糟糕,但我想使用它。
摘自package.json:
"scripts": {
"start": "nodemon jobsServer.js",
"test": "cross-env NODE_ENV=test ./node_modules/.bin/istanbul cover -x \"**/*.spec.js\" ./node_modules/mocha/bin/_mocha -- jobs js --recursive -R spec"
},
jobsServer.js:
global.appPath = require('app-root-path');
// more code here
现在我希望能够在应用中的任何位置访问appPath。
当我运行npm start
时,它会选择全局变量,我很高兴。
但是当我运行npm test
时,它不会加载全局(因为全局是在服务器文件中定义的),因此对appPath的所有引用都会中断。
我不想这样做:
const appPath = require('app-root-path');
在每个.spec.js测试文件中。
如何为每个spec文件加载全局变量?
答案 0 :(得分:8)
您只需要在test / mocha.opts中添加一个安装文件,然后在开始任何测试之前加载,然后您就可以访问这些全局变量,例如:
测试/ mocha.opts
--require should
--require ./test/setup
--ui bdd
--globals global
--timeout 200
测试/ setup.js
global.app = require('some-library')
global.window = {}
global.window.document = {}
文档:
答案 1 :(得分:1)
您可能会编写一个模块来保存全局变量并将其导入测试中:
import getGlobals from './whatever.globals.spec.mjs';
...
describe('Whatever', () => {
it('test global', () => {
const globals = getGlobals();
...
});
whatever.globals.spec.mjs在哪里:
export default function getGlobals() {
return ...; // your global info
}