该代码是使用基于 selenium 和 jasmine 的 sencha 测试软件进行自动化测试的脚本的一部分,虽然目标应该足够简单,但事实证明很难做到正确。代码如下所示:
it('tests something', function(done) {
externalRef1.checkSomething(param1, param2, param3, param4)
.then(
function (result) {
externalRef2.clickSomething(param5, param6, result)
}
)
.then(done)
}, 30000)
功能“checkSomething”:
function checkSomething (param1, param2, param3, param4) {
return new Promise(function (resolve) {
param1.timedout()
.and(function (future) {
//Some code
})
.execute(function () {
//More code
})
.and(function () {
//Even more code
})
.and(function (obj) {
resolve(obj.data) // obj.data will be a boolean
})
})
}
功能“clickSomething”:
function clickSomething (param5, param6, param7) { //param7 receives result input
return new Promise(function (resolve, reject) {
if (param7 === false) {
param5.pageObject(param6).visible().click()
.and(function () {
resolve()
});
reject()
};
reject()
})
}
代码被简化为我认为可能相关的内容。单独执行时,这两个函数都可以正常工作,并且当“clickSomething”函数未包含在“function(result){}”中时,它们甚至可以按预期顺序工作(“clickSomething”在“checkSomething”完成后运行)。但是,当使用包装函数传递结果时,“clickSomething”不再及时运行。
从我可以通过调试收集到的信息来看,“checkSomething”函数仍然可以正常工作,并且它的结果值确实可用于“clickSomething”函数,但是整个it-block在“then()”的内容甚至开始之前就完成了跑步。
我错过了什么?