0

该代码是使用基于 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()”的内容甚至开始之前就完成了跑步。

我错过了什么?

4

0 回答 0