2015-05-13 17 views
8

Potrzebuję wskazówek, jak skonfigurować testowanie jednostkowe projektu TypeScript za pomocą Jasmine.Jak ustawić jaśmin dla projektu maszynopisu

Spec plik testowy wygląda następująco:

/// <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(); 
    }); 
}); 

używam moduł jaśmin npm do uruchamiania testów. jasmine.json jest skierowany do budowanych plików spec JS tak:

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

plik build specyfikacja wygląda następująco:

/// <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 

gdy próbuję uruchomić testy jaśmin narzeka na nieokreśloną funkcję „określenie” :

ReferenceError: define is not defined 

próbowałem szukać na maszynopis + Jasmine ale nie ma wiele informacji (i nie chcę, aby w pełni korzystać z VisualStudio). Byłbym wdzięczny, gdyby ktoś wskazał mi właściwy kierunek ustawiania maszynopisu + jaśminu i gdzie jest mój błąd.

Z góry dziękuję.

Odpowiedz

5

Wygląda na to, że kompilujesz się przy użyciu flagi --module amd, która jest przeznaczona dla modułów asynchronicznych (np. Podczas korzystania z RequireJS).

Jeśli używasz węzła, musisz podać --module commonjs. Spowoduje to w następujący wynik:

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

(Choć nazwa zmiennej może się zmienić, gdyż tworzy nazwę w locie dla Ciebie podczas kompilacji importu stylu ES6 dół).

+0

Dzięki za szybką odpowiedź. Działa z twoją sugestią. Mój projekt to aplikacja SPA, która będzie uruchamiana w przeglądarce. Rozwijam go w VSCode + node.js, aby uruchomić pakiety npm i takie. O ile rozumiem, amd jest bardziej odpowiedni dla aplikacji przeglądarkowych, ale rozwijam się przy użyciu narzędzi node.js -> to z kolei wymaga common.js. Co powinno być używane? – Amid

+0

Interesująca zagadka :) Będziesz chciał skompilować z '--module amd' do użycia w przeglądarce, jeśli używasz RequireJS (ale nadal używasz' --module commonjs' dla twojego lokalnego rozwoju). Oba systemy mają różne wzory modułów. – Fenton

+0

Chodzi o to, że nie używam RequireJS. Do tej pory używam tylko zwykłego TypeScript. A potem chciałem dodać kilka testów jednostkowych, gdy pojawi się błąd. Jeśli rozumiem poprawnie podczas kompilowania przy użyciu flagi -commonjs, używane funkcje (takie jak "wymagają") są już częścią node.js. I dlatego nie występuje błąd. Gdy kompiluję z flagą -amd, funkcje takie jak "define" są domyślnie dostarczane pod maską przez przeglądarkę, ale nie przez node.js. Czy tak jest? – Amid