【问题标题】:Nesting tests in a single Nightwatch test suite to use multiple befores在单个 Nightwatch 测试套件中嵌套测试以使用多个 before
【发布时间】:2016-06-27 13:43:55
【问题描述】:

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

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;
    }
 }

我想构建在许多“页面”对象上运行相同测试的动态测试套件。

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

【问题讨论】:

  • 我认为这不是好的设计,我们应该分开测试用例,制作它。在我所做的任何测试用例中,它们在之前/之后都需要很多页面对象(测试后的前提条件和清理内容)。所以最好让它尽可能简单

标签: nightwatch.js


【解决方案1】:

要实现这一点,您需要更改 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);
    });
  });
});

正如你在这个测试运行器中看到的那样,你可以在你想要的时间嵌套测试并支持嵌套的 before/after 等

【讨论】:

  • 我想避免使用 Mocha,因为这确实是我最初使用的,但如果你这样做,你会失去一些其他的 Nightwatch 功能,所以选择了退出。我希望 Nightwatch runner 会让你,但它没有。我将更新我的问题,指定我不想使用其他跑步者。谢谢!
  • 好吧,没问题,是的,我也在考虑回滚到 nightwatch runner,因为记者没有在 mocha 中显示所有通过的断言
  • @matt-derrick,请在您的编辑中添加“更新”一词并添加日期,以免我的问题无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2016-11-24
相关资源
最近更新 更多