使用 TypeScript 在 Cypress 中获取环境变量

Picking up Environment Variables in Cypress with TypeScript

我正在努力将测试添加到主要使用 TypeScript 的预先存在的 monorepo。所有其他测试都在 TypeScript 中进行,对于我来说,我希望使用 Cypress。

我需要在两个不同的环境中 运行 它们并且需要了解为什么我的环境变量没有被获取。

这可能是很明显的事情,但我是 TS 和 JS 的新手,所以希望得到一些温和的指导。

直接在 /config 下,我有两个环境的 dev.jsonprod.json

{
  "env": {
    "ENV": "dev",
    "BASE_URL": "http://example.com",

  }
}

我的plugins/index.ts如下:

const fs = require('fs-extra');
const path = require('path');

export default (on: Cypress.PluginEvents, _config: Cypress.PluginConfigOptions): void => {
    on('task', {
        log(message) {
            console.log(message)

            return null
        }
    });

    on('task', {
        table(message) {
            console.table(message);
            return null;
        },
    });

    /**
     * @type {Cypress.PluginConfig}
     */
    function getConfigurationByFile(file) {
        const pathToConfigFile = path.resolve('config', `${file}.json`
        );

        return fs.readJson(pathToConfigFile);
    }

    /**
     * @type {Cypress.PluginConfig}
     */
    module.exports = (on, config) => {
        const file = config.env.configFile || 'dev';

        return getConfigurationByFile(file);
    };

}

测试规范中的使用示例:

beforeEach(()=> {
  cy.login(Cypress.env('BASE_URL'), 
})

package.json

中的示例脚本
"test:headless": "npm cypress run --env 'configFile=%ENV%",

运行 从 CLI 为:ENV=dev npm run test:headless

这无法从 dev.json

中提取 url

同样,我确定它有些愚蠢,但不胜感激。

试试 CYPRESS_ 前缀 Option #3: CYPRESS_*

Any OS-level environment variable on your machine that starts with either CYPRESS_ or cypress_ will automatically be added to Cypress' environment variables and made available to you.

CYPRESS_configFile=dev npm run test:headless

...

const file = config.env.configFile || 'dev';