【发布时间】:2018-04-20 11:04:16
【问题描述】:
我已经编写了守夜测试,其中一项测试需要执行终端命令。我已经在 nightwatch 的自定义命令部分编写了终端命令。但是当我执行我的测试时,在执行终端命令后,执行停止。
我想要的是当终端命令执行时,控制权应该返回到 nightwatch 并且它应该恢复剩余的测试。有可能吗?
这是我写的代码:
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);
抱歉,如果我没有正确解释我的问题,请提前致谢。
【问题讨论】:
标签: javascript node.js nightwatch.js