我已经编写了夜班测试,其中一项测试需要执行终端命令。我在nightwatch的自定义命令部分编写了terminal命令。但是当我执行我的测试时,执行终端命令后,执行停止。
我想要的是当执行终端命令时,控制应该返回到守夜人,它应该恢复剩余的测试。有可能吗?
这是我写的代码:
it('Should have Stream URL, Stream Key and Status', function (browser) {
const sessionsPage = browser.page.sessions()
const sourcesPanel = sessionsPage.section.sources
sourcesPanel
.assert.containsText('@stream_details', 'Stream URL')
.assert.containsText('@stream_details', 'Stream key')
.assert.containsText('@stream_details', 'Status')
})
it(' ---- START STREAM ----', function (browser) {
const sessionsPage = browser.page.sessions()
sessionsPage.fire_custom_command()
})
it('Some other test', function (browser) {
// test code
})
上面的代码触发了下面写的自定义命令:
exports.command = function() {
var spawn = require('child_process').spawn;
//kick off process of listing files
var child = spawn('ls', ['-l', '/']);
//spit stdout to screen
child.stdout.on('data', function (data) { process.stdout.write(data.toString()); });
//spit stderr to screen
child.stderr.on('data', function (data) { process.stdout.write(data.toString()); });
child.on('close', function (code) {
console.log("Finished with code " + code);
});
}
在执行自定义命令之后会发生什么,测试暂停,它永远不会继续进行下一次测试。我想要的是在执行自定义命令并退出子进程后,应执行上面写的'some other test'
。
我也尝试了execSync
,但它没有按预期工作。
const ls = 'ls';
const execSync = require('child_process').execSync;
var cmd = execSync(ls);
抱歉,如果我没有正确解释我的问题并提前感谢。
答案 0 :(得分:0)
我已经使用此方法启动之前从交换机获取电子邮件的控制台应用。我用spawnSync
来做这件事。鉴于上面的代码片段,我认为您可以通过执行以下操作来实现它:
function() {
const spawnSync = require('child_process').spawnSync;
const result = spawnSync('ls', ['-l', '/']);
if(result.output[1]) {
console.log('stdout: ', result.output[1].toString());
}
if(result.output[2]) {
console.log('stderr: ', result.output[2].toString());
}
if(result.status !== 0) {
return false;
}
return true;
}
来自node docs:child_process.spawnSync()
方法通常与child_process.spawn()
相同,但在子进程完全关闭之前函数不会返回。