Wie stub-Typoskript-Schnittstelle / Type-definition?
Arbeite ich mit Typoskript auf einer AngularJS 1.X-Projekt. Ich verwende verschiedene Javascript-Bibliotheken für verschiedene Zwecke. Zu unit-test meine Quelle würde ich gerne stub einige Abhängigkeiten mit der Testungen (= Schnittstellen). Ich möchte nicht das JEDER Typ und weder zu schreiben, eine leere Methode für jede interface-Methode.
Im-suchen nach einer Möglichkeit, etwas zu tun:
let dependency = stub(IDependency);
stub(dependency.b(), () => {console.log("Hello World")});
dependency.a(); //--> Compile, do nothing, no exception
dependency.b(); //--> Compile, print "Hello World", no exception
Die Schmerzen, die ich jetzt haben, ist, dass ich entweder any
und implementieren Sie alle Methoden, die aufgerufen werden, in meinem test-Fall oder habe ich das interface implementieren und umsetzen der gesamten Oberfläche. Das ist zu viel unnützen code :(.
Wie kann ich ein Objekt generiert, hat eine leere Implementierung für jede Methode ist typisiert? Ich benutze Sinon für Spott Zwecke, aber ich bin offen für andere Bibliotheken zu.
PS: ich weiß, dass Typoskript löscht die Schnittstellen...aber ich würde gerne lösen :).
InformationsquelleAutor user1879408 | 2016-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, die kurze Antwort ist, dass dies nicht möglich in Typoskript, als die Sprache bietet keine compile-Zeit oder zur Laufzeit "Reflexion". Es ist nicht möglich, für ein mock-Bibliothek zum Durchlaufen der Elemente einer Schnittstelle.
Siehe thread: https://github.com/Microsoft/TypeScript/issues/1549
Dies ist bedauerlich für TDD-Entwickler, in denen die Verspottung einer Abhängigkeit ist ein zentraler Bestandteil des Entwicklungs-workflow.
Gibt es eine Reihe von Techniken, um schnell stubbing die Methoden jedoch, wie beschrieben, durch die anderen Antworten. Diese Optionen können die Arbeit zu tun, mit ein wenig mentale Einstellung.
InformationsquelleAutor Jørgen Tvedt
Habe ich schriftlich Typoskript-tests mit qUnit und Sinon, und ich habe genau das gleiche erlebt Schmerzen, die Sie beschreiben.
Angenommen, Sie haben eine Abhängigkeit von einer Schnittstelle, wie:
Habe ich es geschafft, zu vermeiden die Notwendigkeit, zusätzliche tools/Bibliotheken mit ein paar Ansätzen, basierend auf sinon stubs/Spione und Gießen.
Verwenden Sie eine leere object-literal, dann direkt zuweisen sinon stubs, die die Funktionen im code verwendet:
Verwenden Sie Objekt-literal mit leeren Implementierungen der Methoden benötigt, die von Ihrem code, dann wickeln Methoden in sinon spies/stubs als erforderlich
Arbeiten Sie ganz nett, wenn Sie kombinieren Sie mit sinon Sandboxen und common setup/teardown, wie die von qUnit-Module.
Etwas wie dies (mit der ersten option, würde aber funktionieren auf die gleiche Weise, wenn Sie die zweite option):
Ich würde Zustimmen, dass dies noch nicht die ideale Lösung aber es funktioniert Recht gut, erfordert keine zusätzlichen Bibliotheken und hält die Höhe der zusätzlichen code, der benötigt wird, um eine geringe, überschaubare Ebene.
InformationsquelleAutor Daniel J.G.
Neuesten TypeMoq (ver 1.0.2) unterstützt Spott Typoskript Schnittstellen, wie lange die Laufzeit (nodejs/browser) unterstützt die Globale Proxy-Objekt eingeführt durch ES6.
So, annehmend, dass
IDependency
sieht wie folgt aus:dann lustig mit TypeMoq wäre so einfach:
InformationsquelleAutor florinn
Gibt es wenige Bibliotheken, die ermöglicht, dass
TypeMoq
,TeddyMocks
undTypescript-mockify
sind wohl eine der beliebtesten.Überprüfen Sie die github-repositories und das auswählen, das Euch besser gefällt :
links:
Können Sie auch mehr beliebt libs wie Sinon, aber zuerst müssen Sie ein
<any>
geben und dann engen Sie es zu<IDependency>
Typ (Wie verwende ich Sinon mit Typescript?)Was über das erstellen einer leeren Objekt implementiert dein interface ? und übergeben Sie es als ein Objekt, um Ihre mock ?
Dass nicht die Methoden --> Type erasure 😉
Rechts, dann die einzige Lösung ist, ein Werkzeug zu schaffen, das funktioniert :/
InformationsquelleAutor PolishDeveloper
Es ist nun möglich,. Ich veröffentlicht eine verbesserte version der typescript-compiler, der macht Schnittstellen Metadaten zur Laufzeit verfügbar. Zum Beispiel können Sie schreiben:
- und das ist die Ausgabe:
Mit all diesen Informationen können Sie bauen stubs programmgesteuert, wie Sie bevorzugen.
Finden Sie mein Projekt hier.
InformationsquelleAutor pcan
Können Sie versuchen,moq.ts, aber es hängt ein Proxy-Objekt
InformationsquelleAutor dvabuzyarov