簡體   English   中英

使用Node.js exec子進程運行終端命令后如何恢復夜視測試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM