Я использую Mocha для модульных тестов модулей AMD (requirejs) js. Поскольку модуль должен быть загружен requirejs, тест является асинхронным:Mocha async порядок выполнения
'use strict';
var chai = require('chai');
var should = chai.should();
var requirejs = require('requirejs');
requirejs.config({
baseUrl: '../../',
paths: {
PieWidget: 'tools/scheduler/PieWidget'
}
});
describe('PieWidget tests', function() {
var PieWidget, pw1, pw2;
before('Set up the PieWidget module', function(done) {
requirejs(['PieWidget'], function(_) {
PieWidget = _;
done(); // tell Mocha we are now ready to run the tests
});
});
// tests here
};
Для удобства чтения и лаконичности, я хочу сказать:
context('when the constructor is called', function() {
pw1 = new PieWidget();
it('should create a valid PieWidget', function() {
pw1.should.exist;
//todo check validity
});
});
но Мокко запускают эти строки из строя. Чтобы удовлетворить мокко, я должен:
context('when the constructor is called', function() {
it('should create a valid PieWidget', function() {
pw1 = new PieWidget();
pw1.should.exist;
//todo check validity
});
});
, который на мой взгляд является несоответствие между описанием и логикой, или:
context('when the constructor is called', function() {
before(function() {
pw1 = new PieWidget();
});
it('should create a valid PieWidget', function() {
pw1.should.exist;
//todo check validity
});
});
который кажется многословным и менее читаемым. Есть ли лучший способ написать этот код?
Спасибо за вышеуказанный ответ. Знаете ли вы, что все интерфейсы js test ведут себя так? – bedouger