在 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
映射而来,但这并没有产生任何数据。
我尝试 then
ing 一个 运行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());
我正在尝试调试 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
映射而来,但这并没有产生任何数据。
我尝试 then
ing 一个 运行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());