假设我在JavaScript中使用了以下模块类型模式:
var myModule = (function () {
var Foo = function () { /* ... */ };
var Bar = function () {
this.foo = new Foo();
};
Bar.prototype.someMethod = function () {
this.foo.someMethod();
};
return {
'Bar': Bar
};
})();
是否可取,如果是 - 我如何公开Foo进行单元测试?这样做有一些共同的技巧或模式吗?
答案 0 :(得分:6)
我认为您不应该真正需要对private
成员进行单元测试。只要您对公共成员进行全面测试,私有成员中的任何错误都将表现为公共成员的错误。然后,您可以使用良好的调试来找出确切的问题。
或者,如果您在单独的构建中运行测试,则可以公开封闭对象,并对其进行测试。您需要记住在部署之前删除对封闭对象的引用 - 或者您可以以某种方式自动化它。老实说,除非你打包一个供公众消费的图书馆,否则我一般都不会去除它。
var myModule = (function () {
var _this = this;
var Foo = function () { /* ... */ };
var Bar = function () {
this.foo = new Foo();
};
Bar.prototype.someMethod = function () {
this.foo.someMethod();
};
return {
'Bar': Bar,
'__private__': _this
};
})();
function test_foo(obj) {
var foo = obj.__private__.Foo;
assert(foo.prop, 10)
}
对于内部系统,如果能够清楚地理解不应该访问私有成员,那么能够访问私有数据/功能通常是非问题。通过提供对名称为__private__
的封闭对象的引用来突出显示此内容。 (你能说我对Python有点了吗?;))