【问题标题】:Is it possible to resolve and view the result of a promise while debugging a test in Protactor?在 Protactor 中调试测试时是否可以解析和查看 Promise 的结果?
【发布时间】:2017-04-18 02:27:36
【问题描述】:

我正在尝试在 CucumberJS/Protractor/Chai-as-promised 堆栈中调试测试。

var tableDataRows = $('.example-table-under-test').$$('tr');
var dataToTest = tableDataRows.map(function(rows, index) {
  if (index > 0) {
    var cells = rows.$$('td');
    return {
      'ATTRIBUTE A': cells.first().getText(),
      'ATTRIBUTE B': cells.get(1).getText(),
      'ATTRIBUTE C': cells.get(2).getText(),
      'ATTRIBUTE D': cells.get(3).getText(),
      'ATTRIBUTE E': cells.get(4).getText(),
      'ATTRIBUTE F': cells.get(5).getText()
    };
  }
});
return chai.expect(dataToTest).to.eventually.deeply.equal(tableSpec.hashes());

当我运行测试时,尽管黄瓜规格与屏幕上的表值匹配,但我收到以下错误消息:

AssertionError: expected [ Array(8) ] to deeply equal [ Array(7) ]

我想既然映射器忽略了th 元素的第一行,7 应该等于 7,所以我想调试测试。起初,我尝试将then 添加到map 中,例如tableDataRows.map(...).then(console.error)(因为.map 来自量角器element.all / $$ returns a promise)以输出从tableDataRows 映射的数据,但是没有产生任何数据。

我尝试了 then 一个随机函数,它甚至没有使用已解析的输出来查看它是否正在执行,但它没有 - 所以我认为只是 then 没有解决承诺。

.then(function() {
  console.error("I executed");
  // this didn't work either
});

在那之后,我尝试在 map 函数中的 return 正上方放置一个日志行,因为这似乎正在解决,并且有效 - 7 次(这是我期望的 mapper 跳过标题行,但是这很令人困惑,因为测试声称数组中有 8 个元素。无论如何..)

所以chai-as-promised 中的.to.eventually 以某种方式解决了承诺(就像文档所说的那样),但我看不到.map() 函数之后我的.then() 没有解决任何问题,或者如何我的任何其他尝试也没有解决这个承诺。

是否可以在不返回 chai.expect(假定的)承诺的情况下解决承诺,该承诺包装了用于获取期望数据的承诺? -- 我还注意到,如果我只有 chai.expect(...).to.eventually.equal(...) 而没有前面的返回,什么都不会解决。

【问题讨论】:

    标签: javascript protractor cucumberjs chai-as-promised


    【解决方案1】:

    一位同事最终为我指出了正确的方向。我的早期尝试之一是答案 - 将 .then 添加到 .map 链中,但是当我测试时我没有返回所有这些 chai.expect()。通过把它放在那里并返回它,所有的承诺都得到了解决,我得到了我正在寻找的输出。

    var tableDataRows = $('.example-table-under-test').$$('tr');
    var dataToTest = tableDataRows.map(function(rows, index) {
      if (index > 0) {
        var cells = rows.$$('td');
        return {
          'ATTRIBUTE A': cells.first().getText(),
          'ATTRIBUTE B': cells.get(1).getText(),
          'ATTRIBUTE C': cells.get(2).getText(),
          'ATTRIBUTE D': cells.get(3).getText(),
          'ATTRIBUTE E': cells.get(4).getText(),
          'ATTRIBUTE F': cells.get(5).getText()
        };
      }
    }).then(function(resolvedMap) {
      console.error(resolvedMap);
    });
    return chai.expect(dataToTest).to.eventually.deeply.equal(tableSpec.hashes());
    

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多