在单个Nightwatch测试套件中嵌套测试以使用多个befores

时间:2016-06-27 13:43:56

标签: nightwatch.js

我在套件中有一组测试,我希望在多个页面对象中运行。我尝试构建一个如下所示的测试对象,除了它只运行第一个。

module.exports = {
  'test1': {
    before: function() { console.log('before1'); },
    'test 1a': function() { console.log('test1a'); }
  },
  'test2': {
    before: function() { console.log('before2'); },
    'test 1a': function() { console.log('test2a'); }
  }
};

是否可以在一个测试套件中进行这种嵌套?我想要实现的实际用例是这样的:

['page1', 'page2'].forEach(page => {
  this[`Do something on ${page}`] = {
    before: client => {
        client.page[page].navigate();
    },
    'it does something': client => {
        client.page[page]().expect.section('@element').visible;
    }
 }

我想构建动态测试套件,在许多" page"上运行相同的测试。对象。

更新:我真的想继续使用Nightwatch跑步者,而不是像Mocha那样确实拥有此功能的其他跑步者。

1 个答案:

答案 0 :(得分:0)

要实现这一点,你需要更改nightwatch.json配置以使用其他测试运行器,在这种情况下mocha具有更大的灵活性:

"test_runner" : {
 "type" : "mocha",
 "options" : {
  "ui" : "bdd",
  "reporter" : "spec"
 }
}

然后你就可以写下你的测试:

describe('describe', function() {

  before(function(cl, done) {
    ng = ng({client: cl, screen: 'rounding'});
    client = cl;

    console.log('before1')

    done();
  });

  after(function(client, done) {
    if (client.sessionId) {

        client
        .pause(1999)
        .end(function() {
            done();
        });
    } else {
        done();
    }
  });

  afterEach(function(client, done) {
    done();
  });

  beforeEach(function(client, done) {
    done();
  });

  describe('describe nested', function () {
    before(function (client, done) {
        console.log('before before!')
        done();
    });

    it('expectation', function (client) {
      goToRoundingPage(client);
      client.pause(111);
    });
  });
});

正如您可以通过此testrunner看到的,您可以根据需要嵌套测试并支持嵌套之前/之后等等