假设您正在Node.JS中运行群集,并且您希望对其进行单元测试。例如,您希望确保如果工作者死亡,则群集会执行某些操作,例如分支另一个工作人员以及可能的某些相关工作。或者说,在某些条件下,会产生额外的工人。
我认为为了做到这一点,必须启动集群并以某种方式访问其内部状态;然后(例如)强迫工人卡住,并在延迟后检查状态。如果是这样,如何导出状态?
答案 0 :(得分:4)
您必须设计主人以返回对其群集对象的引用。在您的测试中,您可以使用cluster.workers[2].kill()
杀死其中一名工作人员。 worker对象还具有对子进程对象的引用,您可以使用它来模拟各种条件。您可能必须使用setTimeout来确保主服务器有时间来完成它。
然而,上述方法仍会产生分叉,这在测试场景中可能是不合需要的。你的另一个选择是使用模拟库(SinonJS等)来模拟cluster
的fork方法,然后监视它获得的调用次数。您可以在主群集对象上使用cluster.emit('exit')
来模拟工作人员死亡。
注意:我不确定这只是我的问题,但由于某种原因,cluster.emit
似乎总是为我发出两次。