使用摩卡在守夜人中循环测试

Looping through tests in Nightwatch using Mocha

本文关键字:循环测试 守夜人 摩卡      更新时间:2023-09-26

我正在使用Nightwatch和Mocha来编写一些自动(动态)测试。动态是指我想动态加载一些用于循环测试用例的数据。请参阅下面的代码。我正在为三个项目而苦苦挣扎:

  1. 假设我的测试数组中最终有 3 个项目。当它在测试(it)中循环时,它只打开一个浏览器,转到 google.com,并且不会启动其他两个浏览器。 我确定这与我遇到的一些异步问题有关,但我不知道如何解决它。
  2. 从#1继续,第一个(也是唯一打开的浏览器)甚至没有在结论时关闭。 再次是使用 done() 的某些方面的异步问题。
  3. 理想情况下,我想在测试运行时动态命名测试。 即,代替它("foo"...我想要么在它周围循环并传入标题(我无法正常工作),要么以某种方式在测试(it)代码中动态更改它。

请注意,我不需要在Nightwatch中使用Mocha,但我开始走上使用Mocha的动态测试功能(新的TestCase)的道路,但我也无法让它工作。

这是我代码的缩小版本。

var testArray = [];
describe('createArray', function() {
  before(function(client, done) {
    // do some async operations within a loop and create testArray entries
    // loop {
        testArray.push(foo); // let's say I end up with 3 items.
    // }
    done();
  });
  it('foo', function(client) {
    console.log(testCaseArray);
    testCaseArray.forEach(function(testCase) {
      client.url("http://www.google.com"); // let's say here I would eventually want to have something like client.url("http://....." + testCase.value)
    });
  });
 });

提前谢谢。

你是对的,你需要异步处理测试用例。可以这样做:

it('foo', function(client, done) {
  var testsLeft = testCaseArray.length;
  function onTestComplete() {
    testsLeft--;
    if (testsLeft === 0)
      done();
  }
  testCaseArray.forEach(function(testCase) {
    client.url("http://" + testCase.value, onTestComplete);
  });
});

我不熟悉守夜人,所以你可能需要使用这样的onTestComplete

client.url("http://" + testCase.value).end(onTestComplete);

另外,我意识到这是处理异步回调的一种非常冗长的方式。通常,对于这种情况,使用类似 CallbackManager 的东西会很有帮助,这样你就不需要手动跟踪还剩下多少测试。

更新:

您还可以根据 Mocha 文档动态生成测试。