Как настроить jasmine для проекта typescript

мне нужно некоторое руководство о том, как настроить модульное тестирование проекта TypeScript с Jasmine.

тестовый файл спецификации выглядит следующим образом:

/// <reference path="../../../typings/tsd.d.ts" />
import {Mediator} from '../../../services/remoting/Mediator';

describe('Mediator', () =>
{
    let mediator: Mediator;

    beforeEach(() => 
    {
        mediator = new Mediator();
    });

    it('blah blah', () =>
    {
        expect(mediator.TEST).toBeDefined();
    });
});

Я использую модуль npm jasmine для запуска тестов. жасмин.json указывает на встроенные файлы спецификаций JS следующим образом:

{
  "spec_dir": "build/spec",
  "spec_files": [
    "**/*.js"
  ]
}

файл спецификации сборки выглядит следующим образом:

/// <reference path="../../../typings/tsd.d.ts" />
define(["require", "exports", '../../../services/remoting/Mediator'], function (require, exports, Mediator_1) {
    describe('factory: Mediator', function () {
        var mediator;
        beforeEach(function () {
            mediator = new Mediator_1.Mediator();
        });
        it('should have defined all required fields', function () {
            expect(mediator.ExecuteQuery).toBeDefined();
        });
    });
});
//# sourceMappingURL=Mediator.spec.js.map

когда я пытаюсь запустить тесты, Жасмин жалуется на неопределенную функцию "define":

ReferenceError: define is not defined

Я попытался найти на TypeScript + Jasmine, но информации мало (и я не хочу использовать полную VisualStudio). Поэтому я был бы признателен, если кто-то может указать мне в правильном направлении, как установить typescript + jasmine и где моя ошибка.

спасибо заранее.

1 ответов


похоже, что вы компилируете с помощью --module amd флаг, который предназначен для асинхронных модулей (например, при использовании RequireJS).

Если вы работаете на узле, нужно поставить --module commonjs. Это приведет к следующему результату:

var mediator_1 = require('../../../services/remoting/Mediator');

(хотя имя переменной может измениться, поскольку оно создает имя на лету для вас при компиляции импорта стиля ES6).