2017-06-23 1 views
0

ich eine Klasse in Typoskript geschrieben:Testing Typoskript Module mit Paketabhängigkeiten

import * as uuid from "uuid"; 

export class IdGenerator { 

    getId() { 
    return uuid.v4(); 
    } 
} 

Diese eine Abhängigkeit von der UUID-Paket hat, die ich mit NPM installiert haben.

Ich stelle dies mit anderem Code, der in TypeScript geschrieben wurde, mit webpack im Browser bereit. Abhängigkeiten sind gelöst, alles ist gut.

Ich mag die Klasse testen, so schreibe ich den folgenden Test:

import { IdGenerator } from "../src/IdGenerator"; 

describe("An id generator",() => { 

    const idGenerator = new IdGenerator(); 

    it("generates an id",() => { 
    expect(idGenerator.getId()).not.toBeNull(); 
    }); 

}); 

Ich benutze Chutzpah mit folgenden Konfiguration:

{ 
    "Framework": "jasmine", 
    "TestHarnessReferenceMode": "AMD", 
    "TestHarnessLocationMode": "SettingsFileAdjacent", 
    "EnableTestFileBatching": true, 
    "References": [ 
    { 
     "Path": "node_modules/requirejs/require.js", 
     "IsTestFrameworkFile": true 
    } 
    ], 
    "Compile": { 
    "Mode": "External", 
    "Extensions": [ ".ts" ], 
    "ExtensionsWithNoOutput": [ ".d.ts" ] 
    }, 
    "Tests": [ 
    { "Path": "Components/test" } 
    ] 
} 

Beim Versuch, mit Chuzpe zu testen, hat ich die folgender Fehler:

Also füge ich einen Verweis auf den Pfad in chutzpah.json, die g Es beseitigt diesen Fehler, löst jedoch einen Fehler für eine der Abhängigkeiten von uuid aus. Ich füge eine Referenz für die Abhängigkeit hinzu, erhalte dann einen weiteren Abhängigkeitsfehler und so weiter.

Im Idealfall möchte ich, dass alle Abhängigkeiten auf die gleiche Weise gelöst werden wie beim Bundle, das im Browser bereitgestellt wird.

Sollte ich die Idee aufgeben, meine TypeScript-Dateien mit Paketabhängigkeiten auf diese Weise zu testen und stattdessen die Abhängigkeitsinjektion zu untersuchen und die Paketabhängigkeiten in den getesteten TypeScript-Dateien nachzuahmen? Vielleicht auch separate JavaScript Tests für das Bundle erstellen? Oder gibt es einen anderen Ansatz, der das Testen meines TypeScript-Codes mit den Paketabhängigkeiten ermöglicht?

+0

Können Sie eine Probe zur Verfügung stellen, die ich vor Ort ausgeführt werden kann? Ich bin gespannt auf den Unterschied zwischen webpack und chutzpah, um zu sehen, ob ich helfen kann. –

+0

Projekt hier: https://github.com/alataffective/testing-typescript danke. – fractor

Antwort

0

Das sieht so aus, als würde es nicht funktionieren, da requireJS und Node auf diese Weise nicht kompatibel sind. Siehe here. Aus dieser Antwort:


Es ist nicht möglich RequireJS auf dem Client (Browser) zu verwenden, um Dateien zugreifen node_modules. Dateien unter node_modules zunächst zu einer Stelle kopiert werden muß, die (unter dem public Ordner) zugänglich ist bevor der Client auf sie zugreifen kann. Die Dokumentation sagt RequireJS can access Node modules, aber das funktioniert nur für serverseitige JavaScript (wenn Sie RequireJS-Stil Modul Syntax in Node verwenden möchten).

Um Ihre config Modul in der Client-Anwendung zu verwenden, müssen Sie es zunächst in ein RequireJS-kompatibles Modul umwandeln und kopieren Sie sie unter public. Dieser Artikel explains how to automate this with package managers and build tools und enthält das Zitat, das schließlich mein gebrochenes Verständnis RequireJS + Knoten festgelegt:

In order to use node modules on the browser you will need a build tool. This might bother you. If this is a deal breaker then by all means continue wasting your life copying and pasting code and arranging your script tags.


Verwandte Themen