Kurze und scheinbar dumme Frage, weil so einfach und du denkst allgegenwärtig: hat jemand irgendeine Art von Code Coverage in einem RequireJS Frontend-Projekt (non NodeJS) arbeiten?JavaScript-Code Abdeckung in RequireJS/AMD-Module
Scheint wie eine dumme Frage wegen der Vorherrschaft von TDD-Ansätze in der JS-Welt und die Übernahme von AMD-Entwicklung.
Ich habe eine Million Ansätze versucht, alle fehlen. Mein Projekt ist ein Backbone-Projekt mit Jasmine Unit Tests:
1) JSTD mit Coverage-Plugin. JSTD hat Schwierigkeiten, AMD-Module ordnungsgemäß zu laden und zu instrumentieren. Wenn ich JSTD in einer einzigen js-Datei (kombiniert mit RequireJS-Optimierer) ausführe, funktioniert die Code-Abdeckung wunderbar, AUSSER die Abdeckung wird dann gesammelt und die Metriken in der GESAMTEN Datei definiert. Großartig, das ist nutzlos, weil Bibliotheken von Drittanbietern enthalten sind, und weil ich keine einzelne Einheit anvisieren kann, um die Entwicklung zu testen. Argh.
2) JSCoverage - insgesamt fehlgeschlagen, mag AMD-Module nicht.
3) Chrome spezifische & Firebug spezifische 'live' Instrumentierer - scheitern, mögen keine AMD-Module.
Jeder Ansatz, den ich versuche, scheint große Mengen an benutzerdefinierten Arbeiten zu erfordern. Also vielleicht muss ich eine benutzerdefinierte Lösung von Grund auf neu drehen?
Wie wäre es mit dem folgenden Ansatz: Erweitern Sie den RequireJS-Optimierer auf Gerätecode und erstellen Sie Abdeckung. Dies wäre eine In-Memory-Instrumentierung, die mit einem Flag require.config ({instrument: true}) aktiviert werden kann. Jedes Mal, wenn ein Modul geladen wird, wird es automatisch instrumentiert und in seinem Modul-Repository abgelegt. Coverage-Statistiken werden in einem Objekt unter dem globalen require-Objekt gesammelt und sind von überall zugänglich, zum Beispiel nach einem Jasmine-Testlauf.
Eingabe?
Codeabdeckung ist nicht trivial zu implementieren. Sie müssen AST Hacker mit etwas wie Bunker tun. – Raynos
Einverstanden. Aus diesem Grund habe ich begonnen, vorhandene AST & Instrumentierungsbibliotheken (Esprima, Node-Cover) zu verwenden. Ich habe die meisten der RequireJS-Code-Änderungen gemacht und arbeite an der Instrumentierung & Berichterstattung Sammlungsteil. – Bernardo