Ich teste eine meiner Anweisungen (anglejs) mit grunt / karma / phantomjs / jasmine. Meine Tests laufen gut
describe('bar foo', function () {
beforeEach(inject(function ($rootScope, $compile) {
elm = angular.element('<img bar-foo src="img1.png"/>');
scope = $rootScope.$new();
$compile(elm)();
scope.$digest();
}));
....
});
aber ich bekomme diese 404s
WARN [web-server]: 404: /img1.png
WARN [web-server]: 404: /img2.png
...
Obwohl sie nichts tun, fügen sie der Protokollausgabe Rauschen hinzu. Gibt es eine Möglichkeit, dies zu beheben? (ohne natürlich Karmas LogLevel zu ändern, weil ich sie sehen möchte)
javascript
unit-testing
angularjs
http-status-code-404
karma-runner
Jeanluca Scaljeri
quelle
quelle
Antworten:
Das liegt daran, dass Sie Karma konfigurieren müssen, um es zu laden, und es dann auf Anfrage bedienen müssen;)
In Ihrer Datei karma.conf.js sollten Sie bereits Dateien und / oder Muster definiert haben wie:
Sie können einen Blick hier nach weiteren Informationen :)
BEARBEITEN: Wenn Sie einen NodeJS-Webserver zum Ausführen Ihrer App verwenden, können Sie dies zu karma.conf.js hinzufügen:
EDIT2: Wenn Sie keinen anderen Server verwenden oder verwenden möchten, können Sie einen lokalen Proxy definieren. Da Karma jedoch keinen dynamischen Zugriff auf den verwendeten Port bietet, werden Sie dies weiterhin tun, wenn Karma an einem anderen Port als 9876 (Standard) startet Holen Sie sich diese nervigen 404 ...
Verwandte Ausgabe: https://github.com/karma-runner/karma/issues/872
quelle
port: 9999
)proxies = { '/images/': 'http://localhost:9999/base/images/' };
Das verwirrende Puzzleteil war für mich der virtuelle Basisordner. Wenn Sie nicht wissen, dass dies in den Asset-Pfaden Ihrer Geräte enthalten sein muss, ist das Debuggen schwierig.
Gemäß Konfigurationsdokumentation
Hinweis: Dies gilt möglicherweise nicht für andere Versionen - ich bin auf 0.12.14 und es hat bei mir funktioniert, aber die 0.10-Dokumente erwähnen es nicht.
Nach Angabe des Dateimusters:
Ich könnte dies in meinem Gerät verwenden:
Und ich brauchte den Proxy zu diesem Zeitpunkt nicht.
quelle
Sie können generische Middleware in Ihrer karma.conf.js erstellen - etwas übertrieben, aber die Arbeit für mich erledigt
Definieren Sie zuerst Dummy-1px-Bilder (ich habe base64 verwendet):
Definieren Sie dann die Middleware-Funktion:
Wenden Sie Middleware in Ihrem Karma Conf an
quelle
req.headers.accept
ob sie enthalten sind,image
und geben Sie gegebenenfalls 204 zurück.Basierend auf der Antwort von @ glepretre habe ich eine leere PNG-Datei erstellt und diese zur Konfiguration hinzugefügt, um 404-Warnungen auszublenden:
quelle
karma.conf.js
Stellen Sie zur Behebung sicher, dass Sie mit Ihren Proxys auf die bereitgestellte Datei verweisen:quelle
Obwohl es ein alter Thread ist, habe ich ein paar Stunden gebraucht, um mein Bild tatsächlich aus dem Karma zu bringen, um die 404 zu eliminieren. Die Kommentare waren einfach nicht gründlich genug. Ich glaube, ich kann die Lösung mit diesem Screenshot klären. Im Wesentlichen fehlten vielen Kommentaren die Tatsache, dass der Proxy-Wert mit "/ base" beginnen muss , obwohl sich base weder in einem meiner Ordnerpfade noch in meinen Anforderungen befindet.
("Basis" ohne den Schrägstrich führte dazu, dass Karma eine 400 BAD REQUEST zurückgab)
Nachdem ich ng test ausgeführt habe , kann ich "./src/assets/favicon.png" erfolgreich über die URL http: // localhost: 9876 / test / dummy.png bereitstellen
In meinem Projekt verwende ich die folgenden npm-Paketversionen:
quelle
Wenn Sie irgendwo in Ihrer Konfigurationsdatei einen Stammpfad haben, können Sie auch Folgendes verwenden:
quelle