Requirejsでカルマを動作させようとしています。 Karmaを実行しているときにこれらのエラーがすべて表示される理由がわかりません。
ERROR: 'There is no timestamp for /base/test/mainSpec.js?bust=1387739317116!'
ERROR: 'There is no timestamp for /base/app/main.js?bust=1387739317116!'
ERROR: 'There is no timestamp for /base/bower_components/jquery/jquery.js?bust=1387739317116!'
インスペクターの[ネットワーク]タブに移動すると、すべてのファイルが404なしでそこにあります。
カルマは「ベース」ディレクトリを探しているようですが、私のプロジェクトには「ベース」ディレクトリがないため、少し混乱しています。カルマのドキュメントによると:
Karmaは、/ baseディレクトリの下のファイルを提供します。そのため、サーバー上でファイルへのリクエストは
http://localhost:9876/base/*
。 baseUrlのRequire.js構成は、相対パスでロードされるモジュールの開始コンテキストを提供します。 Karmaサーバーにこの値を設定する場合、/ baseで開始する必要があります。テストのbaseUrlをsrc/main.jsにあるベースURLと同じフォルダーにしたいので、ソースの相対的な要求を変更する必要はありません。したがって、ベースURLをsrc /に配置するには、/ base/srcを記述する必要があります。
控えめに言ってもこれは混乱を招く。 main.jsファイルに '/ base'を指すbaseUrl構成があるはずですか?
注:この投稿は2014年1月16日にKarmaによって有効でした。そのライブラリの現在の状態は定かではありません。そうでない場合、この投稿はKarmaに関連する構成の問題を修正することでおそらく非常に役立ちます。
これらの種類のエラーは、設定ミスによって発生します。テストで使用するすべてのものを、構成ファイルのpattern
sファイルに追加する必要があります。
例えば:
module.exports = function (config) {
config.set({
basePath: './',
frameworks: ['jasmine', 'requirejs'],
files: [
{pattern: 'test/bootstrap.js', included: true},
{pattern: 'test/**/*.js', included: false},
{pattern: 'src/**/*.js', included: false},
{pattern: 'vendor/**/*.js', included: false}
],
exclude: [
],
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Firefox'],
captureTimeout: 6000,
singleRun: false
});
};
この例では、bootstrap.jsがHTMLの唯一のファイルincluded
by Karma- その他のファイルは依存関係bootstrap.jsのコードによってロードされます。パターンの順序は非常に重要であり、残念なことに論理的にはほど遠いです。次のパターンは前のパターンを上書きしません。したがって、test/**/*.js
最初のパターンとtest/bootstrap.js
は2番目として、bootstrapが含まれないため機能しません。これらの場合、Karmaは"empty testsuite"
メッセージ、これを設定する方法がわからなければ役に立たない...
テストでKarma構成ファイルで指定したパターンでカバーされていないファイルを使用しようとすると、"There is no timestamp for xy"
エラーメッセージは、前述の"empty testsuite"
。システムがわからない場合は、手がかり、それが何を意味するのか、それを修正するために何をしなければならないのかわかりません...
構成オブジェクトのexclude
部分はファイル用であり、ファイルパターンに追加のために追加されていますが、テストでそれらを含めたり使用したりすることは望ましくありません。これらは、たとえば、開発環境や本番環境などの構成ファイルrequirejs構成ファイルなどです。
私にとっては、単にbasePath: 'base'
の代わりに baseUrl: '/base'
。
baseUrl: '/base'
ftw!
BasePathは、構成ファイル(karma.conf.js)に関連してプロジェクトのルートを識別するためのものです。この例を見てください: https://github.com/karma-runner/karma/blob/v0.8.5/test/client/karma.conf.js
ブラウザでは、タイムスタンプに関するこのエラーも取得しましたが、何の影響もありません。テストは正常に機能しています。私はそれがエラーよりも警告であるべきだと思う:-)
ジェフの権利です。「テストでは実際にアプリケーションを起動したくないので、アプリのrequirejs configファイルを除外する必要があります。 [LINK] "。
test-main.js
構成ファイルは、アプリが使用するrequirejs構成ファイルとは別のファイルであり、場合によってはconfig.js
またはmain.js
、requirejsの設定場所に応じて。
これらは両方ともパスと依存関係を構成します(同じものを指定することもできます)が、前者は、作成するテストにrequirejsサポートを提供することです。このrequirejs設定全体は、アプリで使用するrequirejsとは別のものです。したがって、後者を含めないでください。カルマを混乱させます。
そして、上記のリンクはitsrequirejsデモで動作するKarmaです。チェックしてください。
さまざまなソースに投稿されたすべてのソリューションを試した後、最後に修正されました。ここで確認してください: 「タイムスタンプなし」エラー設定可能#6 。
Karma.conf.jsファイルの問題の例:
client: {
requireJsShowNoTimestampsError: '^(?!.*(^/base/app/node_modules/))'
}
karma.conf.jsファイルで、require.config関数(この場合はconfig.jsでした)を含むファイルを単に除外すると、エラーはなくなりました。
exclude: [
'app/config.js',
'bower_components/jasmine/**/*.js'
],
@Naruto Sempaiの答えから展開:
最初にkarma.conf.js
ファイルにbasePath
属性を設定して、この問題を解決しました。このパスには、パスがソース/テストファイルのルートになるまで、必要な../
(前のディレクトリ)文字列が含まれます。
次に、test-main.js
ファイル(RequireJS構成を含む)を変更し、baseUrl
を/base
に設定しました。
現在、タイムスタンプエラーはありません。
-
設定した環境とパスを説明するために、基本的なセットアップ例を示します。
ソースファイルの場所:/Users/ben/some-project/src/main/resources/var/www/project/js/app
テストファイルの場所:/Users/ben/some-project/src/test/var/www/project/
Karma Config location:/Users/ben/some-project/src/test/var/www/project/karma.conf.js
RequireJSの設定場所のテスト:/Users/ben/some-project/src/test/var/www/project/test-main.js
私のkarma.conf.js
:
module.exports = function (config) {
config.set({
basePath: '../../../../'
});
}
/Users/ben/some-project/src/
で「ルート」を作成します。
私のtest-main.js
:
requirejs.config({
baseUrl: '/base'
});
私のプロジェクトでまったく同じエラーが発生しました。問題がどこにあるかをデバッグする最良かつ最速の方法は、カルマがロードしたファイルをリストすることです。
karma initを使用した場合(そうでない場合は、単に実行します)、RequireJSの使用に関する質問にYESと応答すると、おそらく次のようなファイルがあります。
var tests = [];
var TEST_REGEXP = /(spec|test)\.js$/i;
var BASE_URL = '/base/build/js';
var BASE_URL_REGEXP = /^\/base\/build\/js\/|\.js$/g;
// Get a list of all the test files to include
Object.keys(window.__karma__.files).forEach(function (file) {
console.log(file;) // ADD THIS CONSOLE LOG TO LIST LOADED FILES
if (TEST_REGEXP.test(file)) {
var normalizedTestModule = file.replace(BASE_URL_REGEXP, '')
tests.Push(normalizedTestModule)
}
})
require.config({
// Karma serves files under /base, which is the basePath from your config file
baseUrl: BASE_URL,
paths: {
},
shim: {
},
deps: tests,
// we have to kickoff jasmine, as it is asynchronous
callback: window.__karma__.start
})
次に、karam.conf.jsファイルで再生し、新しいファイルをロードして、カルマローカルパスで行われていることを確認します。 。
このエラーは、問題のファイルが実際に存在しない場合にも発生する可能性があります!
したがって、このエラーが発生しているファイルがプロジェクトに実際に存在することを確認してください!
ファイルが何であるかを見つけたら、karma.conf.js
でそのようなパターンを使用してそれらを無視できます。
exclude: [ 'path/to/files/to/ignore/**/*.js' ]