JavaScriptファイルからhtml要素にアクセスし、カルマのジャスミンでこれをテストするために、単純なhtmlファイルをカルマ構成ファイルに含めようとしています。
しかし、常にUnexpected token <エラーが発生します。HTML ファイルを含めることができることを Web キャストで見ましたが、なぜそれが私の構成で機能しないのですか?
前もって感謝します
JavaScriptファイルからhtml要素にアクセスし、カルマのジャスミンでこれをテストするために、単純なhtmlファイルをカルマ構成ファイルに含めようとしています。
しかし、常にUnexpected token <エラーが発生します。HTML ファイルを含めることができることを Web キャストで見ましたが、なぜそれが私の構成で機能しないのですか?
前もって感謝します
カルマ構成により、テストで使用するすべてのファイルを登録する必要があります。files
これを行うには、構成の配列にパターンを追加します。
ファイル パターンは次のようになります。
files: [
{
pattern: 'test/unit/*.js',
watched: true, //watching file modifications for test autorun
included: true, //included as <script src="..."> in the runner html file
served: true //used by tests (the test server should serve it)
}
]
短いパターン構文を使用できます。
files: [
'test/unit/*.js'
]
これは、前のパターンとまったく同じことを意味します。
として含まれるテストでファイルを使用したくない場合は、AJAX を介してテスト内からファイルを<script src="file.js"></script>
使用およびロードする必要があります。included: false
テストサーバーのドメインは常に変更される可能性があるため、相対 URL を使用する必要があることに注意してください...
パターンの順序も重要です。逆のオーバーライドを使用します。
files: [
{pattern: '*.js', included: true}
{pattern: '*.js', included: false}
]
この場合、すべての js ファイルが含まれるため、最初のパターンが 2 番目のパターンをオーバーライドします。
たとえば、html ファイルでは次のようになります。
カルマ構成:
files: [
{pattern: 'bootstrap.js', included: true}
{pattern: 'x.html', included: false}
]
ブートストラップ.js:
var xhr = new XMLHttpRequest();
xhr.open('get', '/base/x.html', false);
xhr.send();
console.log(xhr.status, xhr.responseText); //200, '<html content>'
/base
Karma は独自のindex.html
ファイルと js ファイルを最上位に格納するため、URI には常にプレフィックスがあり、サブフォルダーが必要です。どの URI が提供されているかを知りたい場合は、次のコードを使用できます。
var servedUris = Object.keys(window.__karma__.files);
fs
Yadda による同期読み取りをサポートするための基本的なものをいくつか書きました: https://github.com/acuminous/yadda/blob/master/lib/shims/karma-fs.js別のプロジェクトに移動して拡張することができるかもしれません、fs
ブラウザで AJAX の代わりに使用します。少なくとも、それが私が Browserify で行う方法です。
lib/middleware/karma.js
最終的に、Karma インストールのファイルに簡単なパッチを作成しました。拡張子.literal
を使用して、「ファイル全体をページにエコーするだけ」を示します。Karma がこれを行うための組み込みの方法を持っていないことは、いつも不思議に思っていました。私のやり方は確かに見事に構築されているわけではありませんが、あなたにとっては十分かもしれません.
これにより、karma.conf.js に次のように記述できます。
// ...
files: [
"path/to/my_html.literal", // Echoed directly onto the page
"path/to/other.js", // Normal behaviour
// ...
],
私のネストされたscriptTags
関数 ( 内createKarmaMiddleware
) は、次のようになります。
var scriptTags = files.included.map(function(file) {
var filePath = file.path;
var fileExt = path.extname(filePath);
// Include .literal files directly into the body of the HTML.
if (filePath.match(/.literal$/)) {
var fs = require("fs");
return fs.readFileSync(filePath, "utf-8");
}
// ...
差分はこちら: https://github.com/amagee/karma/commit/c09346a71fc27c94cc212a2bd88b23def19ec3a4
html2js プリプロセッサ(AngularJS を使用している場合はng-html2jsプリプロセッサ) を使用する必要があります。それがどのように機能するかについては、プリプロセッサの説明を参照してください。
Karma 0.10 以降、html2js プリプロセッサは Karma に同梱されており、デフォルトで構成されています。
module.exports = function(config) {
config.set({
files: [
'templates/*.html'
],
preprocessors: {
'**/*.html': ['html2js']
}
});
};
次に、HTML コンテンツに JS 文字列としてアクセスできます。
var elm = $(__html__['templates/x.html'])
表示されるエラーは、HTML ファイルが前処理されていないことを意味します。デフォルトでは、 の下にあるすべての HTML ファイルbasePath
が前処理されるため、HTML ファイルが別の場所にある可能性があります。その場合は、それらを構成にpreprocessors
明示的に配置する必要があります。karma.conf.js
さらにサポートが必要な場合は、共有してください。