tyr*_*dis 6 javascript unit-testing
假设我在JavaScript中使用了以下模块类型模式:
var myModule = (function () {
var Foo = function () { /* ... */ };
var Bar = function () {
this.foo = new Foo();
};
Bar.prototype.someMethod = function () {
this.foo.someMethod();
};
return {
'Bar': Bar
};
})();
Run Code Online (Sandbox Code Playgroud)
是否可取,如果是 - 我怎样才能公开Foo进行单元测试?这样做有一些共同的技巧或模式吗?
我认为你不应该真的需要对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)
}
Run Code Online (Sandbox Code Playgroud)
对于内部系统,如果能够清楚地理解不应该访问私有成员,那么能够访问私有数据/功能通常是没有问题的.通过提供带有名称的封闭对象的引用来突出显示__private__.(你能说我对Python有点了吗?;))