在我的测试中,我使用require('child_process')。exec来运行“npm run start-app”,它启动了一个webpack-dev-server。我的测试运行后,我想杀死我已经开始的过程。
目前我可以直接运行“mocha tests.js”成功终止进程。但是,当我使用调用“mocha tests.js”的“npm run tests”运行测试时,该进程不会被终止。这是因为节点进程阻止我杀死进程吗?
我通过使用ps-tree发现pid并使用kill -9或taskkill取决于操作系统来杀死该进程。
test.after(function () {
psTree(appStartProcess.pid, function (err, children) {
if(/^win/.test(process.platform)) {
for(var i = 0; i < children.length; i++) {
exec('taskkill /pid ' + children[i].PID + ' /T /F');
}
} else{
cp.spawn('kill', ['-9'].concat(children.map(function (p) {
return p.PID;
})));
}
});
});
任何建议都将不胜感激!
答案 0 :(得分:0)
我们可以在测试结束后kill
使用#!/usr/bin/env node
require('http').createServer((_, res) => {
res.end('Hi from process')
}).listen(3000, console.log)
返回的ChildProcess
。
鉴于以下服务器充当正在运行的进程:
const { exec } = require('child_process')
// this would typically be done in a separate helper
// that mocha executes before your tests
before(function (done) {
// `this` is the shared mocha execution context
this.runningProcess = exec('test/server.js')
setTimeout(done, 500)
})
after(function () {
this.runningProcess.kill()
})
describe('my tests', () => {
it('properly initializes process', (done) => {
require('http').get({
port: 3000,
agent: false
}, (res) => {
let data = ''
res
.setEncoding('utf8')
.on('data', chunk => data += chunk)
.on('end', () => {
require('assert')(data === 'Hi from process')
done()
})
})
})
})
您的测试可能如下所示:
declare
maxLineNo number := 0;
rc sys_refcursor;
BEGIN
select Max(b.Line_No) into maxLineNo
FROM Brokerage b
WHERE b.External_App_Id = 3720 AND b.Account_Id = '16970' ;
open rc for
SELECT b.External_App_Id -- this select giving erro
, ''
, b.Currency
, ''
, CAST( SUM(b.Brokerage_Amt) as VARCHAR2(17))
, ''
, ''
, 1003 -- 1003 for Report summary
, ''
FROM Brokerage b
WHERE b.External_App_Id = 3720
GROUP BY External_App_Id, B.CURRENCY
ORDER BY 2;
DBMS_OUTPUT.PUT_LINE(maxLineNo); -- this is giving value
dbms_sql.return_result(rc);
end;
或者,您可以使用mocha以外的东西(例如,启动服务器的自定义脚本,运行mocha,然后关闭服务器),但概念基本相同。