Mocha 支持两种方法来处理测试中的异步性。一种方法是使用 done 回调。Mocha 将尝试将一个函数传递给您的所有it
s、before
s 等。如果您接受done
回调,则您有责任在异步操作完成时调用它。回调样式:
before(function(done) {
browser.url("url").getHTML("button").then(function() {
done();
});
});
另一种方法是使用 Promises。由于您对 getHTML 的调用会返回一个 Promise,因此您可以只返回该 Promise,Mocha 会知道在继续执行任何操作之前等待该 Promise 解决。
这是 Promise 样式的示例:
before(function() {
return browser.url("url").getHTML("button");
});
有几点值得注意: -getHtml()
返回对 html 按钮的承诺。每当异步调用getHTML
完成时,传递给函数的then
函数就会被调用,并传入调用的结果值getHTML
。 - 在之前返回该承诺让 mocha 知道您正在执行异步操作。摩卡咖啡会等待这个承诺在经过你的“之前”之前得到解决。
对于您的具体示例,您可能想尝试这样的事情:
describe('the buttons', function() {
var buttons;
before(function() {
return browser.url("url").getHTML("button").then(function(result) {
buttons = result;
};
});
it('does something', function() {
buttons.forEach(function(button) {
});
});
});