나는 Qunit에서 작동하도록 일련의 테스트를 시도하고있다. 나는 JQM과 함께 일하고 있는데, 테스트 방법을 사용하고 있는데, 여기에는 메소드를 추가 할 $.mobile.testHelper
객체가 포함되어 있습니다. 여기 Qunit에서 2+ 테스트를 실행하지 못하는 이유는 무엇입니까?
// my test page is loaded inside an iframe
var frame = document.getElementsByTagName("iframe")[0];
var d = frame.contentDocument;
var w = frame.contentWindow;
var $i = w.$(d);
var $body = w.$("body");
// forcing $(body) as event target
$.testHelper.eventTarget = $body;
// sets "one" listener on "step" event and jumps to next method when triggered
$.testHelper.stepSequence = function (fns) {
$.testHelper.eventSequence("step", fns);
};
// run a test
$.testHelper.runTest = function (command, condition) {
console.log("RUNNING TEST...");
ok(condition, command);
};
// try 10x if a condition is met, wait 1000ms in between
$.testHelper.countDown = function (arr, command) {
var condition, is_done;
var ticker = 0;
var i = w.setInterval(function() {
switch (command) {
case "verifyAttribute":
condition = $i.find(arr[0]).eq(0).attr(arr[1]).indexOf(arr[2]) > -1;
break;
case "waitForElementPresent":
condition = $i.find(arr[0]).length > 0;
break;
}
if (condition) {
console.log("CONDITION PASSED, RUN TEST");
$.testHelper.runTest(command, condition);
w.clearInterval(i);
}
ticker += 1;
console.log(ticker);
if (ticker === 10) {
console.log("FAILED, RUN WITH undefined to fail test");
$.testHelper.runTest(command, condition);
w.clearInterval(i);
}
}, 1000);
};
// my test module
module("UI Basic Interaction");
asyncTest("${base_url}", function() {
expect(2);
// here is my sequence of methods
$.testHelper.stepSequence([
function() {
w.setTimeout(function() {
$body.trigger("step");
}, 800);
$.testHelper.countDown(["div#global-panel", undefined, undefined], "waitForElementPresent");
},
function() {
w.setTimeout(function() {
$body.trigger("step");
}, 800);
$("a:contains('Menu')").trigger("click");
},
function() {
w.setTimeout(function() {
$body.trigger("step");
}, 800);
$.testHelper.countDown(["div#global-panel", "class", "ui-panel-open"], "verifyAttribute");
},
function() {
w.setTimeout(function() {
$body.trigger("step");
}, 800);
$("h1:contains('My Account')").trigger("click");
},
function() {
start();
}
])
});
나는 시험 조건 실행 후에 "단계"를 실행하는 데 필요하지만 동작하지 않습니다
, 그래서 나는를 사용하고 있습니다 아니 - 좋은 setTimeout
내 문제는 UI가 렌더링하는 동안 첫 번째 테스트가 통과하고 두 번째 테스트가 올바르게 시작되지만 그 요소가 발견되면 QUNIT 오류는 내 콘솔과 동시에 거의 Expected 2 assertions, but 1 were run
입니다. 조건이 사실이라고보고합니다.
질문 : 위의 코드에서
충분히 runTest
"빨리"실행되지 않습니다 내 테스트 과정에서 오류가 있기 때문에 Qunit 오류 아웃이? 또한 "step"
을 트리거하는 더 좋은 방법에 만족합니다.
감사합니다.
JQM'testhelper'에 익숙하지 않지만'countDown' 함수가 10 초까지 기다릴 수는 있지만 QUnit.start는 약 4x800ms 후에 실행됩니다. – psquared
사실, 지금 타이밍을 가지고 놀아 라. – frequent
@psquared : helped, 아래 나의 답변 참조 – frequent