私は、CommonJS構文で記述された角度アプリケーションで作業しています。grunt-contrib-requirejsタスクでgruntタスクを使用して、ソースファイルをAMDフォーマットに変換してコンパイルしますそれを1つの出力ファイルにまとめます。私の目標はKarmaをRequireJSで動作させ、ソースファイルとスペックファイルをCommonJS構文で保持することです。KarmaとRequireJSでCommonJS構文でファイルをテストする
私は、次のファイル構造とAMD形式で渡して簡単なテストを得ることができました:
-- karma-test
|-- spec
| `-- exampleSpec.js
|-- src
| `-- example.js
|-- karma.conf.js
`-- test-main.js
と、次のファイル:
karma.conf.js
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files/patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
REQUIRE,
REQUIRE_ADAPTER,
'test-main.js',
{pattern: 'src/*.js', included: false},
{pattern: 'spec/*.js', included: false}
];
// list of files to exclude
exclude = [];
// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];
// web server port
port = 9876;
// cli runner port
runnerPort = 9100;
// enable/disable colors in the output (reporters and logs)
colors = true;
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_DEBUG;
// enable/disable watching file and executing tests whenever any file changes
autoWatch = true;
// Start these browsers, currently available:
browsers = ['Chrome'];
// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
例。
define('example', function() {
var message = "Hello!";
return {
message: message
};
});
exampleSpec.js
define(['example'], function(example) {
describe("Example", function() {
it("should have a message equal to 'Hello!'", function() {
expect(example.message).toBe('Hello!');
});
});
});
テストmain.js
var tests = Object.keys(window.__karma__.files).filter(function (file) {
return /Spec\.js$/.test(file);
});
requirejs.config({
// Karma serves files from '/base'
baseUrl: '/base/src',
// Translate CommonJS to AMD
cjsTranslate: true,
// ask Require.js to load these files (all our tests)
deps: tests,
// start test run, once Require.js is done
callback: window.__karma__.start
});
しかし、私の目標は、ソースファイルとでspecファイルの両方を記述することです同じ結果を持つCommonJS構文:
example.js
var message = "Hello!";
module.exports = {
message: message
};
exampleSpec.js
var example = require('example');
describe("Example", function() {
it("should have a message equal to 'Hello!'", function() {
expect(example.message).toBe('Hello!');
});
});
しかしtrue
に設定cjsTranslate
フラグを持つにもかかわらず、私はこのエラーが表示されます。
Uncaught Error: Module name "example" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded
at http://localhost:9876/adapter/lib/require.js?1371450058000:1746
どのようにこれを達成することができますか?
編集:私はカルマランナーのレポのために、この問題が見つかりました:https://github.com/karma-runner/karma/issues/552をして、この問題に役立つかもしれないいくつかのコメントがありますが、私はこれまで彼らと任意の運を持っていませんでした。
BBBリンクが無効で、同じファイルのコミットへのリンクが変更されました:https://github.com/backbone-boilerplate/backbone-boilerplate/blob/eb172e0ac9accb16d1d46e28ac52be0bded052bb/test/runner.js – MrYellow