나는 Qunit 테스트에 앉아 있고 무슨 일이 일어나고 있는지 지켜보고 있습니다. jQuery Mobile의 listview.filter 확장에서 테스트.이 테스트의 Qunit 카운터가 목표 값에 도달하지 않는 이유는 무엇입니까?
변수 _refreshCornersCount
이 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");
}
]);
});
필자는 필요한 부분이 모두 있기 때문에 테스트에서 일부 코드를 제외했습니다.
내 컴퓨터에서는 this._refreshCornersCount
이 0
으로 설정되어 있고 두 번의 입력 변경으로 2 배 증가하여 각각 필터 루프를 트리거하기 때문에 테스트가 실행되지 않습니다.
지금 잠시 동안이에 앉아있어 ... 어쩌면 내가 ': 그래서 (나는를 테스트하고있어 포함) 모든 매개 변수 만 테스트가 결코 발사하지 this._refreshCornersCount = 2
질문 때문에 정확 위의 코드 조각에서 3
의 값에 도달하는 기술적 인 방법은 this._refreshCornersCount
인가요?
EDIT : 테스트는 jQuery Mobile의 테스트, 특히 listview 필터 확장입니다. 당신은 테스트를 here
편집을 찾을 수 있습니다 : 그래서 여기
내 시험의 전체 코드입니다. 참고 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");
}
]);
});
...
이 문제가 해결 되었습니까? – Omar
nope. :-(아이디어가 있습니까? jQuery Mobile의 공식 테스트입니다. [여기] (https://github.com/jquery/jquery-mobile/blob/master/tests/integration/listview/listview_core.js#L657)를 참조하십시오.) 내가 3의 가치에 도달하는 방법에 대한 단서가 없다 ... – frequent
솔직히 말해서 나는 qunit을 사용하지 않았지만 흥미가있다. 현상금을 세울 것이다 – Omar