[英]Nodejs: Exec from child_process returns bin/sh: 1: command not found but works when writing manually in terminal?
[英]How to resume nightwatch tests after running a terminal command using nodejs exec child process
我已經編寫了睡表測試,並且其中一項測試需要執行終端命令。 我已經在守夜的自定義命令部分中編寫了終端命令。 但是,當我執行測試時,執行完終端命令后,執行將停止。
我想要的是在執行終端命令時,控件應返回到守夜班,並且應恢復其余測試。 可能嗎?
這是我編寫的代碼:
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);
抱歉,如果我沒有正確解釋我的問題,請提前致謝。
我已經使用這種方法啟動了一個控制台應用程序,該應用程序以前曾從交換中獲取電子郵件。 我使用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;
}
從節點docs來看: child_process.spawnSync()
方法通常與child_process.spawn()
相同, child_process.spawn()
之處在於該函數在子進程完全關閉之前不會返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.