Запустите тесты Жасмин, написанные на TypeScript
У меня есть приложение Typescript+Node+Angular2+Electron, и в настоящее время я пытаюсь запустить тесты для классов узлов, написанных также на Typescript.
Для сборки приложения и его запуска в электронном я использую следующий tsconfig:
"compilerOptions": {
"module": "system",
"target": "es6",
...
}
Как вы можете видеть, он использует systemjs и компилирует TS в JS-es6. Работает нормально, само приложение работает.
Теперь мне нужно, чтобы Жасмин поднялась на борт. Я установил этот пакет npm, обновил мои задачи gulp, чтобы запустить gulp-jasmine только для одного файла:
gulp.task('jasmine', function() {
gulp.src('./test/test.js')
.pipe(jasmine())
});
Вот как выглядит мой test.js:
System.register(["./models-src/app/models/pathWatch/pathWatch"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var pathWatch_1;
return {
setters:[
function (pathWatch_1_1) {
pathWatch_1 = pathWatch_1_1;
}],
execute: function() {
describe("Run Application:", () => {
it("starts", () => {
var pw1 = new pathWatch_1.PathWatch();
expect(true).toEqual(true);
});
});
}
}
});
Итак, ничего особенного, 1 import-1test-1assert, завернутый в SystemJs. Когда я пытаюсь запустить этот тест, у меня появляется ошибка: "Система не определена".
Мои вопросы:
1) Можно ли запустить жасминовые тесты, используя загрузчик systemjs внутри?
2) Если это возможно, нужно ли мне устанавливать / настраивать какие-то дополнительные вещи?
3) Я попытался скомпилировать TS, используя Module="commonjs", и он работает. Но я не хочу по-другому компилировать исходный код для тестирования и сборки. Почему с Commonjs все работает нормально без каких-либо дополнительных манипуляций?
4) Также я попытался скомпилировать TS, используя Module="es6". Не работает, у меня ошибка "Неожиданное зарезервированное слово". Можно ли запустить тесты с жасмином, написанные на js es6, не перенося их в es5?
Большое спасибо!
1 ответ
1) Можно ли запустить жасминовые тесты, используя загрузчик systemjs внутри?
2) Если это возможно, нужно ли мне устанавливать / настраивать какие-то дополнительные вещи?
Вы имеете в виду запускать жасминовые тесты в узле, используя systemjs в качестве загрузчика? Я не думаю, что Жасмин поддерживает использование systemjs вместо require
для загрузки модулей. Таким образом, ваши тесты должны быть в commonjs, но тестовый код может использовать SystemJS для загрузки и тестирования кода приложения. Как то так в test.js
может работать при условии, что systemjs настроен правильно и может найти модуль pathWatch:
describe("Run Application:", () => {
it("starts", (done) => {
var system = require('systemjs');
system.config({
// systemjs config here
//
});
system.import('path-to-path-watch-module').then(pathWatch => {
var pw = new pathWatch.PathWatch();
expect(true).toEqual(true);
done();
});
});
});
system.import является асинхронным, поэтому все тесты с жасмином также должны быть асинхронными.
3) Я попытался скомпилировать TS, используя Module="commonjs", и он работает. Но я не хочу по-другому компилировать исходный код для тестирования и сборки. Почему с Commonjs все работает нормально без каких-либо дополнительных манипуляций?
Потому что тогда в скомпилированном коде нет ссылки на System - она использует module.exports
как любой другой модуль узла и может быть загружен как есть с помощью jasmine.
4) Также я попытался скомпилировать TS, используя Module="es6". Не работает, у меня ошибка "Неожиданное зарезервированное слово". Можно ли запустить тесты с жасмином, написанные на js es6, не перенося их в es5?
Module="es6"
требуется среда выполнения, поддерживающая es6 import
а также export
, так что он нуждается в транспортере и загрузчике модуля, прежде чем он сможет работать на текущей версии узла.