【发布时间】:2018-07-18 18:42:15
【问题描述】:
我正在用 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 应用程序并发生某种循环。
问题是:我应该如何导出变量以实现我的目标并避免这种情况?
【问题讨论】:
标签: javascript node.js typescript