1

我正在尝试在 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(因为量角器/ $$返回一个 promise)以输出从 映射的数据,但这并没有产生任何数据。maptableDataRows.map(...).then(console.error).mapelement.all tableDataRows

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

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

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

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

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

4

1 回答 1

0

一位同事最终为我指出了正确的方向。我早期的尝试之一是答案 - 添加.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());
于 2017-04-20T17:05:59.740 回答