在 Protactor 中调试测试时是否可以解决并查看承诺的结果?

Is it possible to resolve and view the result of a promise while debugging a test in Protactor?

我正在尝试调试 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());

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

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 映射而来,但这并没有产生任何数据。

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

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

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

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

是否可以在不 return 包装用于获取预期数据的承诺的 chai.expect(假定的)承诺的情况下解决承诺? -- 我还注意到如果我只有 chai.expect(...).to.eventually.equal(...) 而没有前面的 return.

什么都解决不了

一位同事最终为我指明了正确的方向。我早期的尝试之一就是答案——将 .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());