2015-05-13 22 views
8

Jasmine ile birlikte TypeScript projesinin birim sınamasını nasıl kuracağınıza dair bir kılavuza ihtiyacım var.Typescript projesi için jasmine nasıl ayarlanır

Testi özellik dosyası şuna benzer:

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

Ben testler npm yasemin modülü kullanmak. jasmine.json bu gibi inşa JS Spec dosyalarına işaret:

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

inşa özellik dosyası şuna benzer:

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

ben yasemin tanımsız 'tanımlamak' fonksiyonunu üzerinde şikayet testler deneyin :

ReferenceError: define is not defined 

Ben typescript + Yasemin arama denedi ama fazla bir bilgi yoktur (ve tam visualstudio kullanmak istemiyorum). Bu yüzden, birisi bana tipcript + jasmine'in nasıl ayarlanacağını ve nerede hata yaptığımı göstermesi için minnettar olurum.

Şimdiden teşekkürler.

cevap

5

Eşzamansız modüller için tasarlanmış olan (RequireJS kullandığınızda olduğu gibi) --module amd bayrağını kullanarak derleme yapıyorsunuz gibi görünüyor.

Düğüm üzerinde çalışıyorsanız, --module commonjs ürününü sağlamanız gerekir. Bu, aşağıdaki çıkışı neden olur:

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

(ES6 tarzı ithalatı aşağı derlerken sizin için anında bir isim yaratır olarak değişkenin adı değişse de).

+0

Hızlı yanıt için teşekkürler. Onun öneri ile çalışır. Projem, tarayıcıda çalıştırılacak bir SPA uygulaması. Npm paketlerini ve benzerlerini çalıştırmak için VSCode + node.js dosyasında geliştirdim. Anladığım kadarıyla amd, tarayıcı tabanlı uygulamalar için daha uygundur, ancak node.js araçlarını kullanarak geliştiriyorum -> sırayla common.js gerektirir. Ne kullanılmalı? – Amid

+0

İlginç bir bilmece :) Eğer RequireJS kullanıyorsanız tarayıcınızda kullanmak için '--module amd 'ile derlemek isteyeceksiniz (ancak yerel geliştirme için' --module commonjs' kullanmaya devam edin). İki sistem farklı modül modellerine sahiptir. – Fenton

+0

Sorun şu ki, RequireJS kullanmıyorum. Şimdiye kadar kullandığım tek şey düz TypeScript. Sonra hata geldiğinde bazı birim testleri eklemek istedim. -commonjs bayrağı ile derlediğimde doğru şekilde anlarsam kullanılan işlevler ('require' gibi) zaten node.js. Ve bu nedenle hiçbir hata oluşmaz. -amd bayrağı ile derlediğimde, 'define' gibi işlevler varsayılan olarak kaputun altında tarayıcı tarafından sağlanmıştır ancak node.js. Bu durum mu? – Amid