1

カルマ テスト ランナーでテストするときに、デバッガーが自分の coffeescript ファイルを操作できるようにするのに苦労しています。

おそらく、Webstorm ファイル ウォッチャーにソースマップを生成するように指示するだけで、デバッガーがカルマ テスト ランナーと連携するようになります。残念ながら、デバッガーは、coffeescript コンパイラーによって出力されたマップ ファイルを認識していないようです。file.coffee -> file.js.map を探します。ただし、他の結果を取得しようとしても、マップ ファイルは常に file.coffee -> file.map です。

私のカルマ設定ファイルには次のものがあります(明らかにすべてではなく、関連する部分だけです):

module.exports = (config) ->
  config.set
    files: [
      '../app/scripts/**/*.coffee'
      'spec/*.coffee']
    preprocessors: {
      '../**/*.coffee': 'coffee'
    }

ファイルウォッチャーであらゆる種類の構成を試しました:

引数が「--compile --bare --map $FileName$」で、更新する出力パスが「$FileNameWithoutExtension$.js.map」または「$FileNameWithoutExtension$.js:$FileNameWithoutExtension」のいずれかの単一ファイル ウォッチャー$.js.map"

最初のバージョンでは空白の file.js.map が生成され、2 番目のバージョンでは空白の file.js.map と、適切なソースマップ ファイルである標準の file.map が生成されます。

「--compile --bare」出力パス:「$FileNameWithoutExtension$.js」と「--map」出力パス:「$FileNameWithoutExtension$.js.map」だけを持つ 1 つのファイル ウォッチャーを試しました。 "。それは空の file.js.map を出力し、実際のマップは出力しません。

「--compile --bare」出力パス:「$FileNameWithoutExtension$.js」のみを持つ 1 つのファイル ウォッチャーと、「--compile --map」出力パス:「$FileNameWithoutExtension$. js.map". それは空の file.js.map を出力し、実際のマップは出力しません。

一方、デバッグ モードでテストを実行すると、Karma サーバーは次のように報告します。

WARN [web-server]: 404: /base/spec/schedule-spec.js.map?time=1380945586331
WARN [web-server]: 404: /absolute/Users/Randolph/Documents/Sites/MTF-Minimal/app/scripts/app.js.map?time=1380945586083
etc...

明らかに、サーバーはマップが file.js.map と呼ばれると想定していますが、実際には coffeescript は「js」なしで file.map を出力します。出力ソースマップ ファイルの名前を変更できないようで、デバッガーに何を探すべきかを伝える場所がわかりません。

括弧を付けて言うと、デバッガーは、angular.js や jquery.js などの私のファイルで読み込まれた非 coffeescript ライブラリのマップ ファイルが見つからないことも教えてくれます。おそらくそれは何が間違っているかの手がかりです。

JetBrains にチケットを送信しました。彼らの反応もここで共有します。お手数ですが、解決策をご存知の方がいらっしゃいましたら教えてください。

ありがとう!

4

1 に答える 1

2

File Watcher によって生成された .js および .map ファイルをデバッガーで使用する唯一の方法は、これらの生成された .js ファイルを .coffee ファイルの代わりに karma 構成ファイルにロードすることです。代わりに .coffee ファイルをロードすると、カルマは実際にはトランスパイラーによって生成されたファイルではなく、コーヒー プリプロセッサによって生成された .js ファイルを提供します。これらのファイルにはソース マップが生成されていないため、デバッガーはそれらをどのようにマップするかわかりません。あなたのコーヒーファイル。ここには 2 つのオプションがあります。

  • 次のように、元の .coffee ファイルの代わりに、ファイル ウォッチャーによって生成された .js ファイルをカルマ構成にロードします。

(スニペット)

files: [
'../app/scripts/**/*.js'
'spec/*.js'
]
  • 次のようなソース マップを使用するように、カルマで coffeePreprocessor を構成します。

(スニペット)

files: [
'../app/scripts/**/*.coffee'
'spec/*.cofee'
],
preprocessors: {
            '**/*.coffee': ['coffee']
        },
coffeePreprocessor: {
            options: {
                bare: true,
                sourceMap: true
            },
            // transforming the filenames
            transformPath: function ( path ) {
                return path.replace( /\.js$/, '.coffee' );
            }
        },
...

2 番目のオプションを使用できるようにするには、必ず最新バージョンの karma および karma-coffee-preprocessor を使用する必要があります。

于 2013-10-07T11:38:10.020 に答える