首页 > 解决方案 > 如何在 Jest 中使用全局变量并通过 cmd 传递它

问题描述

我正在尝试通过 puppeteer 和 jest 创建一些 e2e 测试,现在我遇到了有关全局变量的问题。所以我有两个问题:

  1. 如何在 puppeteer 中使用全局变量?现在我的 jest.config.js 中有以下内容
module.exports = {
    globals: {
        URL: "https://demoqa.com/",
        value: "myvalue"
      },
    preset: 'jest-puppeteer',
    testMatch: ["**/?(*.)+(spec|test).[t]s"],
    testPathIgnorePatterns: ['/node_modules/', 'dist'],
    setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
    transform: {
        "^.+\\.ts?$": "ts-jest"
    },
    globalSetup: './jest.global-setup.ts',
    globalTeardown: './jest.global-teardown.ts',
    verbose: true
};

然后我尝试在我的 src/tests/test.spec.ts 中使用全局变量,如下所示:

console.log(URL.toString());
console.log(value.toString());

但这会给出value未定义的错误,但URL具有正确的值,如 jest.config.js

我究竟做错了什么?

  1. 如何通过命令行传递这个全局变量?我在 jest docs 中找到了 --globals 标志,并尝试像这样使用它:

npm run jest -- --globals URL='someUrl', value='someValue'

但它也不起作用。

标签: typescriptpuppeteerts-jest

解决方案


  1. 使用global对象(例如global.value)访问测试中的全局变量

    console.log(global.value);
    
  2. 使用--globals参数以有效JSON格式覆盖全局变量

    npm run jest -- --globals='{"URL": "someUrl", "value": "someValue"}'
    

推荐阅读