Howto:常规测试,看看小部件是否调用this.herited成功
Howto: generic test to see if widgets call this.inherited succesfully?
我在我工作的公司维护一个由许多dijit小部件组成的自定义库。
我不得不处理的许多缺陷/bug都是由于覆盖方法(如destroy
startup
和postCreate
)中缺少this.inherited(arguments)
调用造成的。
其中一些很容易被忽视,直到很久以后才被发现。
我怀疑我可以使用dojo'aspect
.after挂接"base"实现,但我不确定如何获取_widgetBase方法本身的句柄。
仅仅在我自己的小部件的方法上使用.after是没有意义的,因为这不会检查this.inherited(..)
是否被inded调用。
如何编写一个通用测试函数,该函数可以传递给任何dijit/_WidgetBase
实例,并检查在子类化小部件本身调用相同方法时,是否从小部件调用了上述_widgetBase的方法?
最重要的是,我如何获得对上述功能的基本实现的引用?
在阅读了dojo的文档、declare.js代码、调试、谷歌搜索、调试和黑客攻击后,我最终使用了这段代码来获取上一个继承类/mix-in的基方法的句柄,但我对调用getInherited:所涉及的黑客行为并不完全满意
Edit 2我用一个空数组替换了getInherited的第二个参数。虽然我实际上得到了使用aspect
的基类方法的引用,但它不起作用。看来这种做法是失败的。
require(['dijit/registry','dojo/_base/declare','mycompany/widgets/widgetToTest'],
function(registry,declare,widgetToTest)
{
var widget = registry.byId('widgetToTestId');
var baseStartup = getBaseMethod(widget,'startup');
function getBaseMethod(widget,methodName){
return widget.getInherited(methodName,[]);
}
//This is the method body I want to use .after on to see if it was called, it returns the last overriden class in the array of inherited classes. (a mixin in this case, good enough for me!)
alert(baseStartup);
});
我已经放弃尝试使用dojo/aspect
。
相反,我选择修改我们的自定义基础小部件的代码,以包含如下片段。当创建控制台调用及其内容被删除的发布版本时,它们会被自动删除:
console.log(
function(){
(this._debugInfo = this._debugInfo|| {}).postCreate=true;
}.call(this)
);
我在单元测试附近添加的样板代码中有一个简单的方法,这样我就可以在它们各自的单元测试中的所有mycompany.widgets.basewidget
实例上调用它。
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以在使用headerphp函数后自动调用JS函数
- JavaScript尾部调用中的函数是否经过优化
- 是否可以在不更改上下文的情况下调用函数.apply
- console.log是否调用对象的toString方法
- 如果表单无效,是否调用提交
- 使用 Sinon.js 测试一个函数是否调用 ES6 模块中的另一个函数
- 如何测试函数是否调用了特定的方法/函数
- 是否可以确定服务器是否调用了Meteor方法
- 是否调用去抖动方法的角度条件监视不起作用
- 检查是否调用了包装函数
- Howto:常规测试,看看小部件是否调用this.herited成功
- 确定.trigger()是否调用了事件
- 如何检查方法是否调用了茉莉花单元测试
- 如何检查在单元测试中是否调用了jQuery链函数?
- AngularJS,Jasmine:测试是否调用了作用域上的方法
- 是否调用$find是一个相对昂贵的操作
- Jasmine:如何测试在GET请求中是否调用了正确的URL
- 如何使用javascript检查是否调用服务器
- javascript在使用数字索引分配数组值时是否调用. tostring ?