Karma和RequireJS:避免在src中重复并测试RequireJS配置

Mer*_*Ran 7 javascript requirejs karma-runner

例如,这个test-main.js和这个main.js有重复的路径和填充程序.对于大型项目,可能有很多项目.我甚可以使用grunt-bower-requirejs插件将已安装的Bower组件添加到main.js中,但之后,我必须手动或通过程序将它们复制到test-main.js.

有没有方便的方法来避免这种重复,例如,告诉RequireJS包含另一个配置文件?

Lou*_*uis 5

我也讨厌复制信息.我通过在我的测试套件中使用一个调用require.config两次的HTML设置来解决这个问题.

因此,我的测试套件中的HTML首先加载RequireJS,然后是一般配置,它位于一个名为的文件中requirejs-config.js:

<script type="text/javascript" src="lib/requirejs/require.js"></script>
<script type="text/javascript" src="requirejs-config.js"></script>
Run Code Online (Sandbox Code Playgroud)

这个requirejs-config.js文件没什么特别的.这是一个缩写版本:

require.config({
 baseUrl: 'lib/',
 paths: {
   browser_test: '../../../browser_test',
   jquery: 'external/jquery-1.10.2',
   bootstrap: 'external/bootstrap/js/bootstrap.min',
   // [...]
 },
 packages: [
     {
         name: "lodash",
         location: "external/lodash"
     }
 ],
 shim: {
   bootstrap: {
     deps: ["jquery"],
     exports: "jQuery.fn.popover",
   },
   // [...]
 },
 config: {
   // [...]
 },
 enforceDefine: true
});
Run Code Online (Sandbox Code Playgroud)

然后有一个<script>元素require.config使用适用于测试环境的设置调用:

<script>
  require.config({
      paths: {
          'mocha': '/node_modules/mocha',
          'chai': '/node_modules/chai/chai'
      },
      shim: {
          'mocha/mocha': {
              exports: "mocha",
              init: function () { this.mocha.setup('bdd'); return this.mocha; }
          }
      },
      config: {
        // [...]
      }
  });
</script>
Run Code Online (Sandbox Code Playgroud)

('mocha/mocha'垫片看起来很有趣,但它是正确的.)

在这种特殊情况下,第二个呼叫require.config只会增加新的值paths,shim并且config但是也有可能覆盖以前的值.例如,我可以更改'jquery'解析或更改Bootstrap垫片的路径.

你可以看到我在我的测试套件中使用Mocha + Chai,但上面的解决方案根本不是Mocha特有的.

  • 很好的主意.我只是忽略了`require.config`可以被调用两次.我正在使用业力,所以我按顺序包括app/js/main.js和test/unit/test-main.js,并有选择地添加或覆盖`requires.config`. (2认同)