【发布时间】: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