当 mocha 测试超时时停止 webdriver
Stop webdriver when the mocha test times out
我对 运行ning mocha 和 webdriverio 有疑问。当测试超时时,webdriver 客户端仍然会继续 运行。
var assert = require('assert');
var webdriverio = require('webdriverio');
describe('suite', function() {
beforeEach(function(callback) {
this.client = webdriverio.remote().init(callback);
});
it('test1', function(callback) {
this.timeout(500);
this.client
.pause(550)
.call(function() {
assert(false, 'You shouldn\'t be here!');
})
.call(callback);
});
afterEach(function(callback) {
this.client.end(callback);
});
});
当我执行 mocha test.js
时,我得到:
suite
1) test1
2) "after each" hook
0 passing (2s)
2 failing
1) suite test1:
Error: timeout of 500ms exceeded
at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:158:19)
at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
2) suite "after each" hook:
Uncaught AssertionError: You shouldn't be here!
at WebdriverIO.<anonymous> (/Users/user/Documents/test/test.js:15:17)
at WebdriverIO.<anonymous> (/Users/user/Documents/test/node_modules/webdriverio/lib/utils/PromiseHandler.js:146:26)
at /Users/user/Documents/test/node_modules/webdriverio/node_modules/chainit/index.js:137:22
at process._tickCallback (node.js:419:13)
我不希望或不希望发生第二个错误。我该如何实现?
我最终编写了自己的 mocha 包装器,它扩展了常规的 mocha 运行程序,然后能够捕获第一个错误并阻止第二个错误的执行。不幸的是,没有简单的解决方案...
可以使用包含所发生错误的参数调用 Mocha 为异步函数提供的回调。捕获断言抛出的异常并将其传递给 callback
允许 Mocha 继续其工作。 Mocha 只是忽略了对 callback
.
的调用
it('test1', function(callback) {
this.timeout(500);
this.client
.pause(550)
.call(function() {
try {
assert(false, 'You shouldn\'t be here!');
callback();
}
catch (e) {
callback(e);
}
});
});
必须删除第二个 .call()
调用,因为在代码没有超时的情况下,callback
将被调用两次。
如果您想避免在任何地方添加 try... catch...
,您可以使用:
function handle_errors(test_code, callback) {
return function () {
try {
test_code();
callback();
}
catch (e) {
callback(e);
}
};
}
并将调用更改为:
this.client
.pause(550)
.call(handle_errors(function() {
assert(false, 'You shouldn\'t be here!');
}, callback));
我对 运行ning mocha 和 webdriverio 有疑问。当测试超时时,webdriver 客户端仍然会继续 运行。
var assert = require('assert');
var webdriverio = require('webdriverio');
describe('suite', function() {
beforeEach(function(callback) {
this.client = webdriverio.remote().init(callback);
});
it('test1', function(callback) {
this.timeout(500);
this.client
.pause(550)
.call(function() {
assert(false, 'You shouldn\'t be here!');
})
.call(callback);
});
afterEach(function(callback) {
this.client.end(callback);
});
});
当我执行 mocha test.js
时,我得到:
suite
1) test1
2) "after each" hook
0 passing (2s)
2 failing
1) suite test1:
Error: timeout of 500ms exceeded
at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:158:19)
at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
2) suite "after each" hook:
Uncaught AssertionError: You shouldn't be here!
at WebdriverIO.<anonymous> (/Users/user/Documents/test/test.js:15:17)
at WebdriverIO.<anonymous> (/Users/user/Documents/test/node_modules/webdriverio/lib/utils/PromiseHandler.js:146:26)
at /Users/user/Documents/test/node_modules/webdriverio/node_modules/chainit/index.js:137:22
at process._tickCallback (node.js:419:13)
我不希望或不希望发生第二个错误。我该如何实现?
我最终编写了自己的 mocha 包装器,它扩展了常规的 mocha 运行程序,然后能够捕获第一个错误并阻止第二个错误的执行。不幸的是,没有简单的解决方案...
可以使用包含所发生错误的参数调用 Mocha 为异步函数提供的回调。捕获断言抛出的异常并将其传递给 callback
允许 Mocha 继续其工作。 Mocha 只是忽略了对 callback
.
it('test1', function(callback) {
this.timeout(500);
this.client
.pause(550)
.call(function() {
try {
assert(false, 'You shouldn\'t be here!');
callback();
}
catch (e) {
callback(e);
}
});
});
必须删除第二个 .call()
调用,因为在代码没有超时的情况下,callback
将被调用两次。
如果您想避免在任何地方添加 try... catch...
,您可以使用:
function handle_errors(test_code, callback) {
return function () {
try {
test_code();
callback();
}
catch (e) {
callback(e);
}
};
}
并将调用更改为:
this.client
.pause(550)
.call(handle_errors(function() {
assert(false, 'You shouldn\'t be here!');
}, callback));