Javascript 为什么此测试中的Qunit计数器从未达到目标值?
我坐在一个Qunit测试上,很难跟踪到底发生了什么。测试是否来自jQuery Mobile的listview.filter扩展 我不知道变量Javascript 为什么此测试中的Qunit计数器从未达到目标值?,javascript,jquery,jquery-mobile,qunit,Javascript,Jquery,Jquery Mobile,Qunit,我坐在一个Qunit测试上,很难跟踪到底发生了什么。测试是否来自jQuery Mobile的listview.filter扩展 我不知道变量\u scont如何达到3的值 这是正在讨论的部分 module( "Custom search filter", { setup: function() { var self = this; // initially set to 0 this._refreshCornersCount = 0
\u scont
如何达到3
的值
这是正在讨论的部分
module( "Custom search filter", {
setup: function() {
var self = this;
// initially set to 0
this._refreshCornersCount = 0;
this._refreshCornersFn =
$.mobile.filterbar.prototype._addFirstLastClasses;
this.startTest = function() {
return this._refreshCornersCount === 1;
};
// _refreshCorners is the last method called in the filter loop
// so we count the number of times _refreshCorners gets invoked
// to stop the test
$.mobile.filterbar.prototype._addFirstLastClasses = function() {
// increase by 1
self._refreshCornersCount += 1;
self._refreshCornersFn.apply( this, arguments );
if ( self.startTest() ) {
start();
}
}
},
teardown: function() {
$.mobile.filterbar.prototype._refreshCorners = this._refreshCornersFn;
}
});
asyncTest( "Custom filterCallback iterates on all list elements",
function(){
var listPage = $( "#search-customfilter-test" ),
filterCallbackCount = 0,
expectedCount = 2 * listPage.find("li").length;
expect( 1 );
this.startTest = function() {
// trigger once _refreshCornersCount reaches 3
if ( this._refreshCornersCount === 3 ) {
equal(
filterCallbackCount,
expectedCount,
"filterCallback called "+ expectedCount +" times"
);
}
// return true/false
return this._refreshCornersCount === 3;
}
$.testHelper.pageSequence( [
...
// triggers a change,
// which will triggers a filter loop
listPage.find( "input" ).val( "at" ).trigger( "change" );
listPage.find( "input" ).val( "atw" ).trigger( "change" );
}
]);
});
我在测试中遗漏了一些代码,因为必要的部分都在那里
在我的机器上,测试从不触发,因为这个。_refreshCornerScont
被设置为0
,然后随着两次输入更改增加2倍,每次都触发一个过滤器循环。因此,所有参数(包括我正在测试的参数)都是正确的,只有测试永远不会启动,因为这一点。_refreshCornerScont=2
问题:我在这上面坐了一会儿。。。也许我遗漏了一些明显的东西,所以:是否有一种技术方法可以实现
这一点。_\u\u\n仅从上述代码片段中搜索3
的值
编辑:
该测试是来自jQuery Mobile的测试,特别是listview过滤器扩展。你可以找到测试
编辑::
这是我测试的完整代码。注意,我正在执行与JQM中相同的设置
module( "Custom search filter", {
setup: function() {
var self = this;
this._refreshCornersCount = 0;
this._refreshCornersFn = $.mobile.filterbar.prototype._addFirstLastClasses;
this.startTest = function() {
return this._refreshCornersCount === 1;
};
// _refreshCorners is the last method called in the filter loop
// so we count the number of times _refreshCorners gets invoked to stop the test
$.mobile.filterbar.prototype._addFirstLastClasses = function() {
self._refreshCornersCount += 1;
self._refreshCornersFn.apply( this, arguments );
if ( self.startTest() ) {
start();
}
}
},
teardown: function() {
$.mobile.filterbar.prototype._refreshCorners = this._refreshCornersFn;
}
});
asyncTest( "Custom filterCallback should cause iteration on all list elements", function(){
var listPage = $( "#search-customfilter-test" ),
filterCallbackCount = 0,
expectedCount = 2 * listPage.find("li").length;
expect( 1 );
this.startTest = function() {
// XXX NOTE: changed this to 2x, because two changes, trigger 2x _onKeyUp
// and 2x addFirstLastClasses. I never reach 3 with the code as-is
if ( this._refreshCornersCount === 2 ) {
equal( filterCallbackCount, expectedCount, "filterCallback should be called exactly "+ expectedCount +" times" );
}
return this._refreshCornersCount === 2;
}
$.testHelper.pageSequence( [
function(){
//reset for relative url refs
$.mobile.changePage( home );
},
function() {
$.mobile.changePage( "#search-customfilter-test" );
},
function() {
// set the listview instance callback
listPage.find( "ul" ).filterbar( "option", "filterCallback", function( text, searchValue, item ) {
filterCallbackCount += 1;
return text.toString().toLowerCase().indexOf( searchValue ) === -1;
});
// trigger a change in the search filter
listPage.find( "input" ).val( "at" ).trigger( "change" );
listPage.find( "input" ).val( "atw" ).trigger( "change" );
}
]);
});
...
在每个循环结束时调用该函数。在
listPage.find( "input" ).val( "at" ).trigger( "change" );
已调用一次。普雷维乌斯线第二次出现,最后一次出现
listPage.find( "input" ).val( "atw" ).trigger( "change" );
第三个。因此,
this._refreshCornersCount === 3
希望这有帮助。没有:-(你有主意吗?这是jQuery Mobile的官方测试-看。我不知道它是如何达到3的值…老实说,我以前没有使用过qunit,但我很感兴趣。我会悬赏。你确定测试是正确的吗?@Stijn:yup。请参见上面的编辑。如果下面的答案是正确的,你欠我50多个重复lol。)