我正在尝试检查(在单元测试中)特定对象是否是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()
答案 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
班级
但是你要确保server
是ChildProcess
而不是模拟,那么你可以从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)