如何在 PhantomJS/CasperJS 的 windows 上使用子进程模块

How to use child process module on windows from PhantomJS/CasperJS

我正在使用 CasperJS 来测试我的 webApp,问题是我需要访问数据库来自动化测试中的一些必要输入。

我正在寻找关于如何从 casperJS js 脚本中的数据库中检索此数据的替代方法,最后我决定使用 phantomJS child process module to call a groovy script to connect a DB and make a select and print the result to stdout to get it from CasperJS. However from the sample of the phantomJS can not realize how to do it, based on the sample I made some attempts with spawnexecFile,但没有成功。即我尝试:

var process = require("child_process")
var spawn = process.spawn
var execFile = process.execFile

var child = spawn("groovy", ["script.groovy"])

child.stdout.on("data", function (data) {
  console.log("spawnSTDOUT:", JSON.stringify(data))
})

child.stderr.on("data", function (data) {
  console.log("spawnSTDERR:", JSON.stringify(data))
})

child.on("exit", function (code) {
  console.log("spawnEXIT:", code)
})

这不起作用,也不会产生任何输出。我也尝试直接直接执行 dir 命令,也没有任何反应。

我也尝试使用 linux 但它也不起作用,我也尝试创建一个简单的 echo .sh 什么都没有...,但是在 linux 我尝试时to 运行 ls 命令这次它按预期工作。

经过一些尝试,我找到了一种方法。

似乎在 windows 中唯一的方法是将 cmd.exe 作为命令传递,将 groovy script.groovy 作为参数传递。

所以我用

var child = spawn("cmd.exe", ["/k","groovy script.groovy"])

而不是:

var child = spawn("groovy", ["script.groovy"])

这种方式在 windows 上正常工作。

我还找到了在 linux 上 运行 一个 shell 脚本的方法,它执行类似于 windows 解决方案的 groovy.It,而不是调用 .sh 我必须使用 sh 命令:

var child = spawn("sh", ["script.sh"])

并且script.sh执行groovy脚本:

#!/bin/bash
groovy script.groovy