在Node中,如何检查特定对象是否是ChildProcess的实例

时间:2014-12-03 11:10:05

标签: node.js coffeescript mocha

我正在尝试检查(在单元测试中)特定对象是否是ChildProcess,但我似乎无法获得对该类的引用(这里是https://github.com/joyent/node/blob/7c0419730b237dbfa0ec4e6fb33a99ff01825a8f/lib/child_process.js

我想做的事情就像是

selenium = require('selenium-standalone')
spawnOptions = { stdio: 'pipe' }
seleniumArgs = ['-Dwebdriver.chrome.driver=./node_modules/nodewebkit/nodewebkit/chromedriver']
@server = selenium(spawnOptions, seleniumArgs)

expect(server).to.be.an.instanceof(ChildProcess)

但我似乎没有弄清楚从哪里获得对ChildProcess的引用

更新:根据提供的答案,我现在正在测试:

it 'start()', (done)->
  selenium.start.assert_Is_Function()
  selenium.start ->
    selenium.server.assert_Is_Not_Null()
    selenium.server.constructor.assert_Is_Function()
    selenium.server.constructor.name.assert_Is('ChildProcess')
    done()

2 个答案:

答案 0 :(得分:1)

不幸的是,child_process module不会导出其ChildProcess类。您可以轻松访问server的构造函数,但是没有任何东西可以与它进行比较。

我可以看到两个选项。

检查server的构造函数名称是否为ChildProcess

expect(server).to.have.property('constuctor');
expect(server.constuctor).to.have.property('name', 'ChildProcess');

您还可以添加server.constuctor继承自EventEmitter

的支票
expect(server).to.be.an.instanceof(require('events').EventEmitter);

ChildProcess来电

获取spawn班级

但是你要确保serverChildProcess而不是模拟,那么你可以从spawn call获得ChildProcess课程:

ChildProcess = require('child_process').spawn('echo').constructor; // use any command

您将能够使用它来验证您的server对象:

expect(server).to.be.an.instanceof(ChildProcess);

如果您不想实际生成任何内容,可以使用任何不存在的命令。只是不要忘记指定错误处理程序以防止child_process抛出错误:

child = require('child_process').spawn('non-existing-command');
child.on('error', function() {}); // empty error handler
ChildProcess = child.constructor;

答案 1 :(得分:1)

child_process公开节点4.0的ChildProcess类。

var ChildProcess = require('child_process').ChildProcess
expect(server).to.be.an.instanceof(ChildProcess)

在PR中添加:https://github.com/nodejs/node/pull/1760