Я пытаюсь написать тест для моего генератора Yeoman, который вызывает утилиту командной строки для генерации некоторых файлов в папке, которую я создаю. Я видел различные примеры того, как установить тайм-аут для ожидания завершения функции, но изо всех сил пытаюсь заставить его работать локально.
Вот мой тест:
describe('Should properly scaffold with config for Spring and wsdl2rest', function () {
before(function () {
basicProps.name = 'MyAppMock';
basicProps.package = 'com.generator.mock';
basicProps.camelVersion = '2.18.2';
basicProps.camelDSL = 'spring';
var wsdlPath = path.join(__dirname, '../test/address.wsdl');
basicProps.wsdl = wsdlPath;
basicProps.outdirectory = 'src/main/java';
return helpers.run(path.join(__dirname, '../app'))
.inTmpDir(function (dir) {
var done = this.async(); // `this` is the RunContext object.
fs.copy(path.join(__dirname, '../templates'), dir, done);
basicProps.outdirectory = path.join(dir, 'src/main/java');
})
.withOptions({ wsdl2rest: true })
.withPrompts({ name: basicProps.name })
.withPrompts({ camelVersion: basicProps.camelVersion })
.withPrompts({ camelDSL: basicProps.camelDSL })
.withPrompts({ package: basicProps.package })
.withPrompts({ wsdl: basicProps.wsdl })
.withPrompts({ outdirectory: basicProps.outdirectory })
.toPromise();
});
it('Should create the basic structure two ways', function () {
assert.file('pom.xml');
assert.file('README.md');
assert.file('src/main/resources/META-INF/spring/camel-context.xml');
assert.file('src/main/resources/META-INF/spring/camel-context-rest.xml')
});
});
Проблема в том, что исполняемый файл командной строки заканчивает ПОСЛЕ теста, чтобы увидеть, есть ли там файлы, которые он генерирует, поэтому я получаю:
Creating wsdl2rest java output directory
calling: java -jar C:\Users\brianf\Documents\GitHub\generator-camel-project-fork\app\wsdl2rest\target\wsdl2rest-impl-fatjar-0.1.3-SNAPSHOT.jar --wsdl file:///C:/Users/brianf/Documents/GitHub/generator-camel-project-fork/test/address.wsdl --out C:\Users\brianf\AppData\Local\Temp\8d84f15024327cbe792407e1294ab46a5b4a1080\src\main\java --camel-context C:\Users\brianf\AppData\Local\Temp\8d84f15024327cbe792407e1294ab46a5b4a1080\src\main\resources\META-INF\spring\camel-context-rest.xml
1) Should create the basic structure two ways
11 passing (411ms)
1 failing
1) generator-camel:wsdl2rest
Should properly scaffold with config for Spring and wsdl2rest
Should create the basic structure two ways:
AssertionError [ERR_ASSERTION]: src/main/resources/META-INF/spring/camel-context-rest.xml, no such file or directory
+ expected - actual
-false
+true
at convertArgs.forEach.file (node_modules\yeoman-assert\index.js:56:12)
at Array.forEach (<anonymous>)
at Function.assert.file (node_modules\yeoman-assert\index.js:54:26)
at Context.<anonymous> (test\app.js:206:14)
stdout: Retrieving document at 'file:/C:/Users/brianf/Documents/GitHub/generator-camel-project-fork/test/address.wsdl'.
stderr: log4j:WARN No appenders could be found for logger (org.jboss.fuse.wsdl2rest.impl.WSDLProcessorImpl).
stderr: log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
wsdl2rest generated artifacts successfully
В чем секрет того, чтобы заставить эту штуку ждать? Я уверен, что упускаю что-то очевидное, но я в основном программист на Java, а не JavaScript, и немного борюсь с некоторыми асинхронными аспектами языка.
Заранее спасибо!
Обновление: хотя было предложено использовать параметры асинхронного кода Mocha (https://mochajs.org/#asynchronous-code) Мне трудно внедрить эти концепции в тест, который я написал, и я мог бы использовать некоторую дополнительную помощь, если кто-то справился с этим с тестированием Йоменского генератора?