CommonJS 構文で記述され、grunt-contrib-requirejs タスクで grunt タスクを使用してソース ファイルを AMD 形式に変換し、それを 1 つの出力ファイルにコンパイルする角度付きアプリケーションに取り組んでいます。私の目標は、Karma を RequireJS で動作させ、ソース ファイルとスペック ファイルを CommonJS 構文に保つことです。
次のファイル構造を使用して、AMD 形式で簡単なテストに合格することができました。
-- karma-test
   |-- spec
   |   `-- exampleSpec.js
   |-- src
   |   `-- example.js
   |-- karma.conf.js
   `-- test-main.js
および次のファイル:
カルマ.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;
example.js
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!');
        });
    });
});
test-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
});
ただし、私の目標は、次のように、ソース ファイルとスペック ファイルの両方を 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!');
    });
});
しかし、cjsTranslateフラグが に設定されているにもかかわらず、次のtrueエラーが表示されます。
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
これをどのように達成できるかについてのアイデアはありますか?
編集: Karma-runner リポジトリでこの問題を見つけました: https://github.com/karma-runner/karma/issues/552この問題に役立つ可能性のあるコメントがいくつかありますが、運がなかった彼らとこれまで。