javascript - 我怎样才能重用 mocha 测试,这样我就不必重复自己了?

标签 javascript node.js asynchronous mocha.js

我正在尝试用 mocha 编写一些测试,我将通过 BrowserStack 在多个浏览器中自动执行这些测试。与其为每个浏览器重复 test.it 代码,我想让我的代码保持干爽,并将一些 test.it block 包装在一个函数中,然后在内部调用该函数test.describe,像这样(实际的测试细节并不重要);

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

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

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

  runTests(driver);

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

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

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

  runTests(driver);

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

但是由于这段代码是异步的,调用runTests()时没有定义driver,所以失败了。我该如何构造它,以便我不必为每个浏览器重复 test.it block ?

最佳答案

我会这样构造它:

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');

我在上面的代码中直接使用了 describeit 而不是 test.describe 等。我想你的测试环境包装Mocha 调用或您正在使用我不熟悉的界面。

关于javascript - 我怎样才能重用 mocha 测试,这样我就不必重复自己了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26022637/

相关文章:

asp.net - 方法名称中的异步后缀现在已弃用?

javascript - 创建一个按钮到新的路由reactJS

php - 使用 jQuery 或 Javascript 包含 PHP 文件

javascript - 在 Javascript 的匿名函数回调中修改对象属性的正确方法

node.js - 第一个参数必须是字符串类型或者 Buffer、ArrayBuffer、Array 或类数组对象的实例。收到未定义

javascript - 捕获自定义错误并发回自定义响应

javascript - 同步两个 HTTP 请求

c++ - I/O 完成端口的异步操作返回 0 字节传输

javascript - 使用另一个数组中的值转换所有数组键

javascript - JS 前端更新 View {不工作}?