Запустите тесты Жасмин, написанные на 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, так что он нуждается в транспортере и загрузчике модуля, прежде чем он сможет работать на текущей версии узла.

Другие вопросы по тегам