首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AssertionError [ERR_ASSERTION]:子进程配置错误

AssertionError [ERR_ASSERTION]:子进程配置错误
EN

Stack Overflow用户
提问于 2020-11-09 20:52:06
回答 2查看 830关注 0票数 1

我有一个test.js文件,它接收一个child_process并检查环境变量MY_ENV_VAR,这是在index.js文件练习函数中设置的。当我运行node test.js时,测试失败,出现一个错误,即AssertionError ERR_ASSERTION:子进程配置错误。我试过调试,但没有得出任何可靠的结论。我认为子进程没有接收到正确的output.Below是本练习所需的文件:

其他信息

我将额外的命令添加到派生方法中,这些命令反映在下面的index.js文件中。这现在会导致另一个断言错误,因为我的环境变量的长度不等于assertion.strictEqualchild.js文件中指定的一个。子进程正在接收系统环境变量,而不是相对于此进程的环境变量。因此,如果我可以限制环境变量的范围,那么程序将按预期工作。

index.js

代码语言:javascript
复制
'use strict'
const { spawn } = require('child_process')

function exercise (myEnvVar) {
  // TODO return a child process with
  // a single environment variable set 
  // named MY_ENV_VAR. The MY_ENV_VAR 
  // environment variable's value should 
  // be the value of the myEnvVar parameter 
  // passed to this exercise function
  process.env.MY_ENV_VAR = myEnvVar
  return spawn(process.execPath, 
['child.js', '-e','process.env',
 '-e', 'process.stdout.pipe(process.stdout)', '-e', 'process.exit(0)']);
}
module.exports = exercise

child.js

代码语言:javascript
复制
'use strict'
const assert = require('assert')
const clean = (env) => Object.fromEntries(
  Object.entries(env).filter(([k]) => !/^(_.*|pwd|shlvl)/i.test(k))
)
const env = clean(process.env)

assert.strictEqual(env.MY_ENV_VAR, 'is set')
assert.strictEqual(
  Object.keys(env).length,
  1,
  'child process should have only one env var'
)
console.log('passed!')

test.js

代码语言:javascript
复制
'use strict'
const assert = require('assert')
const { equal } = assert.strict
const exercise = require('.')

let sp = null
try {
  sp = exercise('is set')
  assert(sp, 'exercise function should return a child process instance')
  if (Buffer.isBuffer(sp)) {
    equal(sp.toString().trim(), 'passed!', 'child process misconfigured')
    process.stdout.write(sp)
    return
  }
} catch (err) { 
  const { status} = err
  if (status == null) throw err
  equal(status, 0, 'exit code should be 0')
  return
}

if (!sp.on) {
  const { stdout, stderr } = sp
  if (stderr.length > 0) process.stderr.write(stderr)
  if (stdout.length > 0) process.stdout.write(stdout)
  equal(sp.status, 0, 'exit code should be 0')
  equal(stdout.toString().trim(), 'passed!', 'child process misconfigured')
  return
}

let out = ''
if (sp.stderr) sp.stderr.pipe(process.stderr)
if (sp.stdout) {
  sp.stdout.once('data', (data) => { out = data })
  sp.stdout.pipe(process.stdout)
} else {
  // stdio may be misconfigured, or fork method may be used,
  // allow benefit of the doubt since in either case
  // exit code check will still fail:
  out = 'passed!'
}
const timeout = setTimeout(() => {
  equal(out.toString().trim(), 'passed!', 'child process misconfigured')
}, 1000)

sp.once('exit', (status) => {
  equal(status, 0, 'exit code should be 0')
  equal(out.toString().trim(), 'passed!', 'child process misconfigured')
  clearTimeout(timeout)
})

所有的帮助都是欢迎和感谢的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-10 00:28:35

我已经更新了index.js中的函数,并且代码执行时有与会者参加。正确的解决办法如下:

index.js

代码语言:javascript
复制
'use strict'
const { spawn } = require('child_process')

function exercise (myEnvVar) {
  // TODO return a child process with
  // a single environment variable set 
  // named MY_ENV_VAR. The MY_ENV_VAR 
  // environment variable's value should 
  // be the value of the myEnvVar parameter 
  // passed to this exercise function
  return spawn(process.execPath, ['child.js'], {
    env: {MY_ENV_VAR: myEnvVar}
  });
}
module.exports = exercise
票数 1
EN

Stack Overflow用户

发布于 2021-07-07 17:53:51

我相信我和你做的项目是一样的。请注意,我们无法在的Node.js版本16上使用以下代码清除子进程的环境变量。(不过,它在Linux上运行得很好)

代码语言:javascript
复制
function exercise (myEnvVar) {
  // TODO return a child process with
  // a single environment variable set 
  // named MY_ENV_VAR. The MY_ENV_VAR 
  // environment variable's value should 
  // be the value of the myEnvVar parameter 
  // passed to this exercise function
  return spawn(process.execPath, ['child.js'], {
    env: {MY_ENV_VAR: myEnvVar}
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64759113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档