1
我試圖在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呈現,但是當元素被發現時,幾乎同時出現了Expected 2 assertions, but 1 were run
錯誤我的控制檯報告情況爲真。
問:
從上面的代碼,有沒有在我的測試程序的錯誤,不運行runTest
「快」不夠,因爲Qunit出錯了呢?此外,我會很高興爲更好的方式來觸發"step"
。
謝謝!
我對JQM'testhelper'不熟悉,但它看起來像'countDown'函數可能會等待10秒,但'QUnit.start'將在大約4x800ms後運行。 – psquared
真的,現在玩的時機。 – frequent
@psquared:有幫助,請參閱下面的答案 – frequent