gpt4 book ai didi

javascript - 在 typescript 中导入/导出变量的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 14:29:42 25 4
gpt4 key购买 nike

我正在使用 Cucumber + Puppeteer + Typescript 开发测试自动化脚本。我面临着导入在主模块中声明的变量的问题,比如 index.js。首先,谈谈我想要实现的目标:我想通过执行 test-runner.ts 来运行我的测试,而不是通过 npm run cucumber 来运行我的测试,因为要求需要对流程有更多的控制。 test-runner.ts 模块的草稿如下所示:

const exec = require('child_process').exec;
const commandLineArgs = require('command-line-args');

export let launchUrl: string;

const optionDefinitions: Array<object> = [
{ name: 'country', alias: 'c' },
{ name: 'environment', alias: 'e' },
{ name: 'headless', alias: 'h' },
];

function initGlobals() {
const options = commandLineArgs(optionDefinitions);

if (options.environment === 'integration') {
launchUrl = 'https://example.url.com';
}
}

function main() {
let cucumber: any;
let cucumberHtmlReporter: any;

cucumber = exec('./node_modules/.bin/cucumber-js', (stdout: any, err: any) => {
console.log(err);
console.log(`stdout: ${stdout}`);
});

cucumber.on('exit', () => {
cucumberHtmlReporter = exec('node cucumber-html-reporter.js', (stdout: any, err: any) => {
console.log(err);
console.log(`stdout: ${stdout}`);
});
});
}

initGlobals();
main();

因此,如您所见,它主要解析参数、运行 Cucumber 并导出一个变量。该变量被导入到步骤定义文件中。从理论上讲,它应该可以正常工作,但不幸的是,事实并非如此。导入时,整个函数会再次执行。这意味着每次执行 import { launchUrl } from ../test-runner 时,都会运行一个新的 Cucumber 应用程序并发生某种循环。

问题是:我应该如何导出变量来实现我的目标,避免出现这种情况?

最佳答案

无论如何,最好的做法是将常量存储在一个单独的配置文件中,您可以从中导出 launchUrl。您的 test-runner.ts 将导入它并根据需要对其进行变异。

export const URL_CONFIG = { launchUrl: '' };

然后在你的测试运行器中:

import { URL_CONFIG } from './config';
URL_CONFIG.launchUrl = 'foo'; //Everywhere in the ap launchUrl is 'foo'

关于javascript - 在 typescript 中导入/导出变量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com