2014-09-24 57 views
2

我想在摩卡书写一些测试,我要通过BrowserStack在几个浏览器中自动化。像这样(实际的测试细节不重要),我不想重复每个浏览器的test.it代码,而是想让我的代码保持干爽,并将几个test.it块封装在一个函数中,然后在test.describe内调用该函数。我如何重复使用摩卡测试,所以我不必重复自己?

function runTests(driver) { 
    test.it('form works', function() { 
    var result = testForm(driver, '#formId', '[email protected]'); 
    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(); }); 
}); 

但由于这个代码是异步,driverrunTests()被称为是没有定义,所以它失败。我如何构造这个结构,以便我不必为每个浏览器重复test.it块?

回答

0

摩卡还使用注入“完成”回调异步测试的概念。因此,如果您在“beforeEach”,“it”和“afterEach”中指定此回调,则Mocha将注入该回调并在执行此回调之前不执行下一个方法。所以我会这样改变你的代码:

function runTests(driver, done) { 
    test.it('form works', function(done) { 
    var result = testForm(driver, '#formId', '[email protected]'); 
    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(); 
    }); 
}); 

你可以找到更多关于asynchronous testing with mocha here的信息。

0

我想构建这样的:

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', '[email protected]'); 
      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,等等。我想你的测试环境包摩卡来电或您正在使用的界面我不熟悉。