【问题标题】:Karma and RequireJS: avoid duplication in src and test RequireJS configKarma 和 RequireJS:避免 src 中的重复并测试 RequireJS 配置
【发布时间】:2014-01-11 07:34:35
【问题描述】:

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

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

【问题讨论】:

    标签: javascript requirejs karma-runner


    【解决方案1】:

    我也讨厌重复信息。我通过在我的测试套件中使用调用 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>
    

    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
    });
    

    然后有一个&lt;script&gt; 元素调用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>
    

    'mocha/mocha' shim 看起来很有趣,但它是正确的。)

    在这种特定情况下,第二次调用require.config 只会将新值添加到pathsshimconfig,但也可以覆盖之前的值。例如,我可以更改 'jquery' 解析的路径或更改 Bootstrap 的 shim。

    您可以看到我在我的测试套件中使用了 Mocha + Chai,但上面的解决方案实际上并不是特定于 Mocha。

    【讨论】:

    • 好主意。我只是忽略了require.config 可以被调用两次。我正在使用 karma,所以我按顺序包含了 app/js/main.js 和 test/unit/test-main.js,并有选择地添加或覆盖 requires.config
    • 很棒的解决方案@MerlinRan。感谢您的提示!
    • @MerlinRan 你能发布一个你的解决方案的例子吗?
    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多