2017-09-27 55 views
7

Pracuję z projektem testowania, w którym piszę konfigurację Jasmine Karma czysto JavaScript, aby przetestować wstępnie skompilowaną konfigurację Maszynopis. Jednak nie mogę uruchomić przypadków testowych.Jasmine testów nie uruchamia się w zdefiniowaniu w skompilowanym Typescript

Widzę, że komunikaty konsoli pochodzące ze skompilowanego maszynopisu w konsoli są w porządku, ale po prostu nie uruchamiają skryptów testowych.

Uwaga ta pochodzi z AngularApp, ale cała ta część pochodzi z sekcji utworzonej i skompilowanej bez Angular2.

Nie ma komunikatu o błędzie, poza tym pokazano, że testy 0/0 zostały uruchomione, a nie było znacznika czasu dla "komponentu/do/testu".

W pliku test.spec.js mam

define("testName", ["component/to/test"], function(component){ 
    describe("testing module", function(){ 
     it("should work", function(){expect(true).toEqual(true)}); 
    }) 
} 

W skompilowanego pliku maszynopis, myTs.js

var requirejs, require, define; 
(function (global) { 

    define("component/to/test" ["depend", "ences"]), function(depend,ences) 
    { more code here }) 

    some compiled typescript here 
}); 
require.config({ 
    path: {path to javascript libs}, 
    shim: { ... } 
}) 

W moim pliku karma

basePath: '', 
frameworks: ['jasmine', 'requirejs'], 
files: [ 
    'lib1', 
    'lib2', 
    'spec/test-main.js', 
    {pattern: 'js/*.js', included: true, served: true}, 
    {pattern: 'spec/*.spec.js', included: false, served: true} 
], 
exclude: [], 
reporters: ['progress'], 
autoWatch: true, 
browsers: ['Chrome'] 

W mój test-main.js, który dostałem od karma init po zapytaniu, czy chcę użyć requirejs.

var allTestFiles = [] 
var TEST_REGEXP = /(spec|test)\.js$/i 

Object.keys(window.__karma__.files).forEach(function (file) { 
if (TEST_REGEXP.test(file)) { 

    var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '') 
    allTestFiles.push(normalizedTestModule) 
} 

}) 

require.config({ 
    baseUrl: 'base', 
    deps: allTestFiles, 
    callback: window.__karma__.start 
}) 

Komentarze i niektóre niezwiązane z tym opisem kody zostały usunięte.

Odpowiedz

1

Co ty próbujesz zrobić można zrobić. Zrobiłem to wiele razy, bez żadnych problemów.

Zawsze należy uruchomić RequireJS z opcją konfiguracji enforceDefine włączone:

require.config({ 
    enforceDefine: true, 
    // Anything else you need. 
}); 

ponieważ ukazuje problemy, które mogą pozostać niezauważone. Jedynym momentem, w którym nie chcesz, aby ta opcja była włączona, jest podanie znaczącego powodu, dla którego enforceDefine jest zły w Twoim przypadku.

Jednym z głównych problemów w kodzie, który pokazujesz, jest to, że nazywasz nazwy modułów w nazwach w wywołaniach define. Podobnie jak define("testName", ... Nie powinieneś tego robić. Usuń nazwy modułów z połączeń define. Zdefiniowane na sztywno nazwy modułów są dodawane przez optymalizator, gdy poprosisz go o utworzenie pakietów modułów. Jest kilka przypadków, w których możesz chcieć zakodować nazwę, ale te przypadki są rzadkie i nie możesz tego zrobić, chyba że możesz podać ważny i dobry powód, dla którego potrzebujesz zakodowanej nazwy.

W przypadku pliku testowego nazwa zakodowana na stałe jest szczególnie problematyczna. test-main.js kieruje RequireJS do załadowania plików testowych. Skutecznie wymaga modułu o nazwie podobnej do spec/test.spec. Kiedy RequireJS faktycznie załaduje twój plik JavaScript odpowiadający temu modułowi, znajdzie on definicję modułu o nazwie testName. Więc nie znajduje modułu spec/test.spec i nie działa w trybie cichym, ponieważ enforceDefine ma wartość false.

Podana na stałe nazwa component/to/test, którą podajesz pod define w myTs.js prawdopodobnie działa poprawnie, gdy wyświetlasz konfigurację. Wciąż nie polecam używania tam zakodowanej nazwy. Mówisz:

nie było timestamp dla „komponent/do/test”

Jeśli masz na myśli znacznik czasu karmę, wtedy nie może być dowolny, ponieważ nie ma pliku o tej nazwie.

1

Nie powinieneś kompilować plików spec z tsc, a następnie uruchamiać karmę przez pliki js.

Powinieneś konfiguracji karmę z maszynopis ładowarek, to pakiet powinien spróbować z Przykładowa konfiguracja:

https://www.npmjs.com/package/karma-typescript#configuration

Jeśli jest kanciasty v2 + projekt, jesteś zdecydowanie należy użyć @ kątowe/CLI

https://github.com/angular/angular-cli

jest on obsługiwany przez kątowej zespołu i daje mnóstwo fantazyjnych rzeczy, takich jak:

  • prod budować
  • wyposażeniu m.in budować
  • łatwy Konfiguracja uniwersalna
  • karmy i kątomierz configs itp