我正在为小型JavaScript应用程序中的模块编写单元测试。为了保持接口清洁,某些实现详细信息通过匿名函数(通常的JS隐私模式)关闭。但是,在测试时,我需要访问/模拟/验证私人零件。

我之前写过的大多数测试都在Python,那里没有真正的私人变量(成员,标识符,无论您想称呼它们)。人们只是通过为用户的领先下划线提出隐私,并在测试代码时自由忽略它。在静态键入的OO语言中,我想可以通过将其转换为保护并对要测试的对象进行亚分类来使私人成员可以访问测试。在JavaScript中,后者不适用,而前者似乎不好。

我总是可以回到黑匣子测试,只需检查最终结果即可。这是最简单,最干净的方法,但不幸的是,不足以满足我的需求。

因此,是否有一种标准方法可以使变量保持私密,同时仍保留一些在JavaScript中进行测试的后门?

有帮助吗?

解决方案

不,我不相信。这基本上归结为您是采用封闭方法并放弃白盒子测试还是进行白色盒子测试,并为“私人”成员使用名称装饰。实际上,不仅在Python中,而且在JavaScript中,太多的项目使用了不太魔术的私人来装饰私人。因此,从某种意义上说,这已经是对问题的广泛接受解决方案。

如果您不想要它并且确实需要白色框单元测试,那么您始终可以将测试集成到对象中。如果您对生产代码有单独的构建步骤(最小化,要求/提供分辨率等),则可以在此过程中删除测试功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top