依赖 'Facts' 包内部结构进行包测试是否安全?

Is it safe to rely on 'Facts' package internals for package testing purposes?

我有一个经常使用 observeChanges 的包 (yeputons/meteor-smart-publish),我想添加一个测试(我现在使用 TinyTest),它允许我确保所有这些观察者都是最后终止,没有 handle.stop() 被跳过。

直接的方法是:添加 'Facts' 包(它是 Meteor 内部的),订阅 'meteor_facts' 并检查 observe-handles 属性 项目与 _id="mongo-livedata",这不是很安全,因为它都是未记录的,将来可以以任何方式修改。

是否有更多的记录方式来检查此类事情?

Facts 构建包的唯一目的是在管理界面的仪表板中显示一些移动数字。

这是我提出的解决方案,它仍然是 hacky,但至少可以实施 w/o 触及客户端上的事实和订阅:

您可以猴子修补 oplog-observe-driver 和 polling-driver 的构造函数和停止方法 类。通过用一个只调用原始函数但在测试中验证某些状态的函数包装它们,您可以实现测试目标:

https://github.com/meteor/meteor/blob/cf4477ff27cba9f8a8f63ec2f435969af0b6707c/packages/mongo/oplog_observe_driver.js#L29

https://github.com/meteor/meteor/blob/cf4477ff27cba9f8a8f63ec2f435969af0b6707c/packages/mongo/oplog_observe_driver.js#L853

https://github.com/meteor/meteor/blob/cf4477ff27cba9f8a8f63ec2f435969af0b6707c/packages/mongo/polling_observe_driver.js#L1

https://github.com/meteor/meteor/blob/cf4477ff27cba9f8a8f63ec2f435969af0b6707c/packages/mongo/polling_observe_driver.js#L181