使用RequireJS在Karma中共享依赖关系的正确方法

时间:2014-04-02 18:29:07

标签: requirejs karma-runner

我使用Karma和jasmine进行单元测试。我有一个main-test.js文件来配置karma,一个main.js来配置我的应用程序。

main-test.js

//
...
//
require.config({
  baseUrl: '/base',
  paths: {
    jquery: 'components/jquery/dist/jquery', // this is copypaste
    //another dependencies
  },
  //
  ...configuration
  //
});

main.js

require.config({
  paths: {
    jquery: 'components/jquery/dist/jquery', // this is copypaste
    //another dependencies
  },
  //
  ...configuration
  //
});

在这两种配置之间共享路径的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我们遇到了与我的团队相同的问题,最后要求将主配置改为 test-main.js

// requiring global requireJS config
require(['/base/config/require.conf.js'], function() {
  'use strict';

  // first require.config overload: Karma specific
  require.config({
    baseUrl: '/base/src',

    paths: {
      'angularMocks': '../bower_components/angular-mocks/angular-mocks'
    },

    shim: {
      'angularMocks': {
        deps: ['angular']
      }
    }
  });

  require(['angularMocks'], function() {

    var specFiles = [];
    for (var file in window.__karma__.files) {
      if (window.__karma__.files.hasOwnProperty(file)) {
        if (/\/base\/src\/.*_test\.js$/.test(file)) {
          specFiles.push(file);
        }
      }
    }

    // second overload to include specFiles and start Karma
    require.config({
      deps: specFiles,
      callback: window.__karma__.start
    });
  });
});

我们的使用AngularJS + RequireJS的项目的入门应用程序结构可在此处获取:angular-requirejs-ready

我不认为这是正确的方式,只是我们的方式;)