使用测试钩子
Nightwatch 提供标准的 before
/after
和 beforeEach
/afterEach
钩子,用于在测试中使用。
before、beforeEach、after、afterEach
before
和 after
分别在测试套件执行之前和之后运行,而 beforeEach
和 afterEach
在每个测试用例(测试步骤)之前和之后运行。
所有方法都将 Nightwatch 实例作为参数传递。
示例
module.exports = {
before : function(browser) {
console.log('Setting up...');
},
after : function(browser) {
console.log('Closing down...');
},
beforeEach : function(browser) {
},
afterEach : function(browser) {
},
'step one' : function (browser) {
browser
// ...
},
'step two' : function (browser) {
browser
// ...
.end();
}
};
在上面的示例中,方法调用的顺序如下:before(), beforeEach(), "step one", afterEach(), beforeEach(), "step two", afterEach(), after()
。
异步 before[Each] 和 after[Each]
所有 before[Each]
和 after[Each]
方法也可以执行异步操作,在这种情况下,它们将需要作为第二个参数传递的 callback
。
done
函数必须作为最后一步调用,当异步操作完成时。如果不调用它,将会导致超时错误。使用 beforeEach 和 afterEach 的示例
module.exports = {
beforeEach: function(browser, done) {
// performing an async operation
setTimeout(function() {
// finished async duties
done();
}, 100);
},
afterEach: function(browser, done) {
// performing an async operation
setTimeout(function() {
// finished async duties
done();
}, 200);
}
};
控制 done
调用超时
默认情况下,done
调用超时设置为 10 秒(单元测试为 2 秒)。在某些情况下,这可能不够,为了避免超时错误,可以通过在外部全局文件(有关外部全局变量的详细信息,请参见下文)中定义 asyncHookTimeout
属性(以毫秒为单位)来增加此超时。
有关示例,请参阅提供的 globalsModule 示例。
显式失败测试
通过使用 Error
参数调用 done
,可以在测试钩子中故意使测试失败
module.exports = {
afterEach: function(browser, done) {
// performing an async operation
performAsync(function(err) {
if (err) {
done(err);
return;
}
// ...
});
}
};
全局测试钩子
与测试套件相同的测试钩子集也可以在全局范围内使用,在测试范围之外。有关详细信息,请参阅下一节。