【问题标题】:How to initialise a global variable in unit test runs?如何在单元测试运行中初始化全局变量?
【发布时间】:2017-06-11 23:01:54
【问题描述】:

我知道全局变量不好,但我想使用一个。

摘自 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 测试文件中。

如何为每个规范文件加载全局变量?

【问题讨论】:

    标签: javascript node.js mocha.js


    【解决方案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
    }
    

    【讨论】:

      【解决方案2】:

      您只需在 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 = {}
      

      文档:

      http://unitjs.com/guide/mocha.html#mocha-opts

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多