JavaScript-Codeabdeckung in RequireJS / AMD-Modulen

8

Kurze und scheinbar dumme Frage, weil so einfach und du denkst allgegenwärtig: hat jemand irgendeine Art von Code-Abdeckung bekommen, um in einem RequireJS-Frontend-Projekt (nicht NodeJS) zu arbeiten?

Scheint eine dumme Frage zu sein wegen der Verbreitung von TDD-Ansätzen in der JS-Welt und der Übernahme der 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 für eine einzige js-Datei (kombiniert mit RequireJS-Optimierer) ausführe, funktioniert die Code-Abdeckung wunderbar, außer dass die Abdeckung dann erfasst und die Metriken in der GESAMTEN Datei definiert werden. 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 - Total Fail, mag AMD-Module nicht.

3) Chrome specific & amp; Firebug-spezifische "Live" -Instrumentatoren - scheitern, mögen AMD-Module nicht.

Jeder Ansatz, den ich versuche, scheint eine Menge individueller Arbeit zu erfordern. Also muss ich vielleicht eine benutzerdefinierte Lösung von Grund auf neu erstellen?

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?

    
Bernardo 16.06.2012, 16:18
quelle

5 Antworten

6

Blanket.js funktioniert mit Qunit mit einem modifizierten RequireJS Loader. Wir arbeiten an der Jasmine-Unterstützung und nehmen gerne Rückmeldungen oder Vorschläge entgegen.

Wenn Ihr Projekt in Produktion geht, ist Blanket.js nichts für Sie, aber wenn es nur ein Nebenprojekt ist, könnte es sich sehen lassen, wenn es Ihren Anforderungen entspricht.

EDIT: Blanket unterstützt nun Jasmine.

    
Alex Seville 06.11.2012, 17:35
quelle
3

Nun, es stellt sich heraus, Node-Coverage bietet tatsächlich eine AMD-agnostische Schnittstelle, die gut mit RequireJS und Jasmine, funktioniert den zu instrumentierenden Code von seinem eigenen Server zu bedienen.

Ich werde noch einige Zeit damit verbringen, an der RequireJS-Coverage-Implementierung zu arbeiten, die ich gestartet habe, da es keinen separaten Server erfordert.

    
Bernardo 19.06.2012 14:59
quelle
2

Was genau ist Ihr Problem mit AMD-Modulen und JSCoverage? Ich habe ein Setup (QUnit / PhantomJS / JSCoverage) mit AMD-Modulen laufen.

Vielleicht haben Sie gerade vergessen, Ihre Bibliothekspfade in Ihrer require.config korrekt einzurichten?

Nachdem ich die Bibliothekspfade geändert habe, um den instrumentierten Code anstelle der "normalen" Dateien zu verwenden, funktionierte alles.

    
Sebastian Golasch 12.07.2012 14:23
quelle
2

Sehen Sie sich das Projekt an, das ich vor Kurzem für Berichte zur einfachen JavaScript-Berichterstattung im Browser veröffentlicht habe, JSCovReporter Ссылка

    
maraujop 18.07.2012 09:08
quelle
2

Mokkawrapper

Ich habe gerade ein Node-Modul geschrieben, das Coverage Reporting automatisiert. Es basiert auf Mocha, Jscoverage und Node's Assert. Sie müssen nicht verlangen oder make oder environnment Variablen verwenden.

Es ist auf GitHub gehostet: mochawrapper

jscoverage läuft vielleicht nicht im Browser, also sollten Sie sich folgendes ansehen: bunker , das auf heights basiert -js

    
Harald Rudell 22.08.2012 08:50
quelle