Nightwatch 提供标准的 before/afterbeforeEach/afterEach 钩子,用于在测试中使用。

before、beforeEach、after、afterEach

beforeafter 分别在测试套件执行之前和之后运行,而 beforeEachafterEach 在每个测试用例(测试步骤)之前和之后运行。

所有方法都将 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;
      }
      // ...
    });
  }
};

全局测试钩子

与测试套件相同的测试钩子集也可以在全局范围内使用,在测试范围之外。有关详细信息,请参阅下一节。