我怎样才能重复使用摩卡testing,所以我不必重复自己?
我试图在摩卡书写一些testing,我将通过BrowserStack在几个浏览器中自动化。 而不是重复每个浏览器的test.it
代码,我想保持我的代码DRY并包装几个test.it
块在一个函数中,只是调用test.describe
内的test.describe
,像这样(实际的testing细节是不重要的);
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(); }); });
但是由于这个代码是asynchronous的,因此在调用runTests()
时runTests()
driver
,因此失败。 我怎样才能构造这个,以便我不必为每个浏览器重复test.it
块呢?
摩卡还使用“完成”callback注入asynchronoustesting的概念。 因此,如果您在“beforeEach”,“it”和“afterEach”中指定此callback,则Mocha将注入该callback,直到调用callback才执行下一个方法。 所以我会这样改变你的代码:
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(); }); });
你可以在这里find更多关于摩卡asynchronoustesting的信息。
我会这样构造它:
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');
我已经在上面的代码中直接使用了describe
和it
,而不是test.describe
等。我想你的testing环境包装了Mocha调用,或者你正在使用我不熟悉的接口。
- Sails.js和Mocha:使用supertest:path问题,当控制器在像api \ controllers这样的coustom文件夹被移动到api \ controllers \ admin
- 在node.js中对unit testing中的依赖关系进行存根
- 用Mocha和ChaitestingExpress和护照OAuth2
- 如何忽略伊斯坦布尔覆盖范围内node.js中的所需文件
- 获取TypeError:这不是在mocha中使用Buffer.from的types数组
- require.main.require工作,但不在摩卡testing
- 我如何构buildnode.js摩卡testing
- 用摩卡jsunit testingexpressJwt中间件
- 用mocha.jstestingCLI应用程序