我希望有条件地执行一些命令/断言,具体取决于先前的断言是否成功。
我似乎找不到使用leadfoot的链接语法来嵌套then
调用或有条件地执行事物的方法。
这是我的测试(每个函数末尾的返回值是由于这是编译coffeescript):
tdd.test(tableUrl, function() {
this.timeout = 60000;
return this.remote.get(require.toUrl("tests/pages/" + tableUrl))
.setPageLoadTimeout(60000)
.setFindTimeout(20000)
.findByCssSelector('.dataTables_wrapper table.dataTable')
.then(null, function(err) {
return assert.fail('', '', 'Table should exist');
}).then(pollUntil(function() {
var table;
table = document.querySelector('.dataTables_wrapper table.dataTable');
if (table.querySelectorAll('tbody td').length > 1) {
return true;
} else {
return null;
}
}, null, 20000, 500)).then(function() {
console.log('Assertion succeeded: Table should have data');
return assert.ok(true, 'Table should have data');
}, function(err) {
return assert.fail('', '', 'Table should have data');
});
});
当表不存在时,“表应该存在”和“表应该有数据”断言应报告为失败。但是,只有最后一个断言失败。当我注释掉“表应该有数据”错误回调时,“表应该存在”断言被报告为正确失败。
我想做的是
测试是否存在table
(通过findByCssSelector)。
a)如果存在,请报告它存在并进行测试以确定它有多个td
元素。这是通过pollUntil
完成的,以确保一旦找到多个td
而不是等待整个隐式等待时间,就会解决命令完成/保证。
b)如果不存在,请报告它不存在。
由于缺少条件,如果第一个findByCssSelector
失败,我似乎找不到不执行第二个'表应该有数据'轮询的错误回调的方法并且只有在测试中报告的最后一个断言失败。
答案 0 :(得分:3)
因此条件分支可以在then
次调用时发生,this answer解决了如何使用实习生进行条件分支。
我遇到的问题是由于pollUntil,leadfoot Command函数的行为方式与普通function returning a callback function that returns a promise rather than a promise directly方法不同。
可以通过将pollUntil
包装在匿名函数中,使用pollUntil
方法立即调用call
函数,传入当前this
值来避免这种情况。 then设置回调到Command对象的上下文,然后最终链接另一个Command。
以上代码使用pollUntil
使用正确的条件分支。
tdd.test(tableUrl, function() {
this.timeout = 60000;
return this.remote.get(require.toUrl("tests/pages/" + tableUrl))
.setPageLoadTimeout(60000)
.setFindTimeout(5000)
.findByCssSelector('.dataTables_wrapper table.dataTable')
.then((function() {
return pollUntil(function() {
var table;
table = document.querySelector('.dataTables_wrapper table.dataTable');
if (table.querySelectorAll('tbody td').length > 1) {
return true;
} else {
return null;
}
}, null, 20000, 500).call(this).then(function() {
console.log('Assertion succeeded: Table should have data');
return assert.ok(true, 'Table should have data');
}, function(err) {
return assert.fail('', '', 'Table should have data');
});
}), function(err) {
return assert.fail('', '', "Table should exist. Error: " + err.name);
});
});