Javascript 我如何重用mocha测试以避免';你不必重复我的话吗?

Javascript 我如何重用mocha测试以避免';你不必重复我的话吗?,javascript,node.js,asynchronous,mocha.js,Javascript,Node.js,Asynchronous,Mocha.js,我正在尝试用mocha编写一些测试,我将通过BrowserStack在多个浏览器中实现自动化。与其重复测试。它为每个浏览器编写代码,我想保持我的代码干燥并包装一些测试。它在一个函数中阻塞,只需在测试中调用该函数。这样描述,就像这样(实际的测试细节并不重要) 但由于此代码是异步的,因此调用runTests()时未定义driver,因此它失败。如何构造它,使我不必重复测试。它为每个浏览器阻塞?Mocha还使用注入“完成”回调的概念进行异步测试。所以,如果您在“beforeach”、“it”和“aft

我正在尝试用mocha编写一些测试,我将通过BrowserStack在多个浏览器中实现自动化。与其重复
测试。它为每个浏览器编写
代码,我想保持我的代码干燥并包装一些
测试。它
在一个函数中阻塞,只需在
测试中调用该函数。这样描述
,就像这样(实际的测试细节并不重要)


但由于此代码是异步的,因此调用
runTests()
时未定义
driver
,因此它失败。如何构造它,使我不必重复
测试。它为每个浏览器阻塞

Mocha还使用注入“完成”回调的概念进行异步测试。所以,如果您在“beforeach”、“it”和“afterEach”中指定此回调,Mocha将注入它,并且在调用此回调之前不执行下一个方法。因此,我将通过以下方式更改您的代码:

function runTests(driver, done) {
  test.it('form works', function(done) {
    var result = testForm(driver, '#formId', 'test@test.com');
    return 'Expected Result' === result;
    done();
  });
}

test.describe('Tests for IE 9', function() {
  var driver;

  test.before(function(done) {
    var capabilities = {
      'browser' : 'IE',
      'browser_version' : '9.0'
    };
    driver = setupDriver(capabilities);
    done();
  });

  runTests(driver, done);

  test.after(function(done) {
    driver.quit(); 
    done();
  });
});

您可以找到有关的更多信息。

我将按照以下方式构建它:

function makeTests(kind, version) {
    describe("Tests for " + kind + " " + version, function () {
        var driver;
        before(function() {
            var capabilities = {
                'browser' : kind,
                'browser_version' : version
            };
            driver = setupDriver(capabilities);
        });

        it('form works', function() {
            var result = testForm(driver, '#formId', 'test@test.com');
            if ('Expected Result' !== result)
                throw new Error("failed!");
        });

        // Add more tests here...

        after(function() { driver.quit(); });
    });
}

makeTests('IE', '9');
makeTests('IE', '10');
我在上面的代码中直接使用了
descripe
it
,而不是
test.descripe
,等等。我想您的测试环境包装了Mocha调用,或者您使用的是我不熟悉的接口

function makeTests(kind, version) {
    describe("Tests for " + kind + " " + version, function () {
        var driver;
        before(function() {
            var capabilities = {
                'browser' : kind,
                'browser_version' : version
            };
            driver = setupDriver(capabilities);
        });

        it('form works', function() {
            var result = testForm(driver, '#formId', 'test@test.com');
            if ('Expected Result' !== result)
                throw new Error("failed!");
        });

        // Add more tests here...

        after(function() { driver.quit(); });
    });
}

makeTests('IE', '9');
makeTests('IE', '10');