1. ホーム
  2. javascript

[解決済み] karmaのユニットテストにおいて、画像の404警告を修正する方法

2023-04-07 10:31:10

質問

grunt/karma/phantomjs/jasmineを使用して、ディレクティブ(angularjs)の1つをユニットテストしています。私のテストはうまく実行されます。

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();
    }));
    ....
});

が、このような404が表示されます。

WARN [web-server]: 404: /img1.png
WARN [web-server]: 404: /img2.png
...

これらは何もしませんが、ログ出力にノイズを加えています。これを修正する方法はありますか?(もちろん、それらを見たいので、カルマのlogLevelを変更することなく)

どのように解決するのですか?

それは、カルマをロードするように設定し、要求されたときにそれらを提供する必要があるからです ;)

karma.conf.jsファイルには、すでに以下のようなファイルおよび/またはパターンが定義されているはずです。

// list of files / patterns to load in the browser
files : [
  {pattern: 'app/lib/angular.js', watched: true, included: true, served: true},
  {pattern: 'app/lib/angular-*.js', watched: true, included: true, served: true},
  {pattern: 'app/lib/**/*.js', watched: true, included: true, served: true},
  {pattern: 'app/js/**/*.js', watched: true, included: true, served: true},
  // add the line below with the correct path pattern for your case
  {pattern: 'path/to/**/*.png', watched: false, included: false, served: true},
  // important: notice that "included" must be false to avoid errors
  // otherwise Karma will include them as scripts
  {pattern: 'test/lib/**/*.js', watched: true, included: true, served: true},
  {pattern: 'test/unit/**/*.js', watched: true, included: true, served: true},
],

// list of files to exclude
exclude: [

],

// ...

ご覧ください ここで をご覧ください。)

EDIT : nodejsのウェブサーバを使用してアプリを実行する場合、karma.conf.jsにこれを追加することができます。

proxies: {
  '/path/to/img/': 'http://localhost:8000/path/to/img/'
},

EDIT2 : 他のサーバを使用しない、または使用したい場合、ローカルプロキシを定義することができますが、Karmaは使用中のポートへのアクセスを動的に提供しないため、もしkarmaが9876(デフォルト)以外のポートで起動すると、まだそれらの迷惑な404を得るでしょう...。

proxies =  {
  '/images/': '/base/images/'
};

関連する問題: https://github.com/karma-runner/karma/issues/872