Правильный способ поделиться зависимостями в Карме с RequireJS

Я использую карму и жасмин для своих юнит-тестов. у меня есть main-test.js файл для настройки кармы и 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 ответ

Решение

Мы встретили ту же проблему с моей командой и в итоге потребовали основной конфигурационный файл в 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, доступна здесь: https://github.com/glepretre/angular-requirejs-ready.

Я не утверждаю, что это правильный путь, только наш путь;)

Другие вопросы по тегам