Max*_*keh 6 javascript testing unit-testing name-decoration
我正在一个小型Javascript应用程序中编写模块的单元测试.为了保持界面清洁,一些实现细节由匿名函数(通常用于隐私的JS模式)关闭.但是,在测试时我需要访问/模拟/验证私有部分.
我之前编写的大多数测试都是在Python中,没有真正的私有变量(成员,标识符,无论你想要什么).一个人只是通过一个领先的下划线为用户建议隐私,并在测试代码时自由地忽略它.在静态类型的OO语言中,我想通过将私有成员转换为受保护的子类并将子类化为要测试的对象,可以使私有成员可以访问测试.在Javascript中,后者不适用,而前者似乎是不好的做法.
我总是可以回到黑盒测试,只需检查最终结果.这是最简单,最干净的方法,但遗憾的是并不能满足我的需求.
那么,是否有一种标准方法可以保持变量私有,同时仍保留一些后门进行Javascript测试?
不,我不相信有。它基本上可以归结为您是否采用封闭方法并放弃白盒测试,或者进行白盒测试并为“私有”成员使用名称修饰。实际上不仅在 Python 中,在 javascript 中也有太多项目使用不那么神奇的下划线来装饰私有变量。所以在某种程度上,这已经是一个被广泛接受的问题解决方案。
如果您不希望这样并且确实需要白盒单元测试,那么您始终可以将测试集成到您的对象中。如果您对生产代码有单独的构建步骤(最小化、要求/提供分辨率等),那么您可以在此过程中删除测试函数。