0

我在以下 gulp 任务中使用browserify 独立选项来生成 UMD 模块:

gulp.task("bundle-source", function () {
  var b = browserify({
    standalone : 'inversify',
    entries: __dirname + "/build/source/inversify.js",
    debug: true
  });

独立选项使用以下代码包装库代码,以确保它可以作为 Node 模块、AMD 模块或 Global 加载:

 !function(n) {
    if ("object" == typeof exports && "undefined" != typeof module) module.exports = n();
    else if ("function" == typeof define && define.amd) define([], n);
    else {
        var e;
        e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.inversify = n()
    }
}(function() {
    return function n(e, t, i) {
        function r(u, p) {
            if (!t[u]) {
                if (!e[u]) {
                    var s = "function" == typeof require && require;
                    if (!p && s) return s(u, !0);
                    if (o) return o(u, !0);
                    var c = new Error("Cannot find module '" + u + "'");
                    throw c.code = "MODULE_NOT_FOUND", c
                }
                var f = t[u] = {
                    exports: {}
                };
                e[u][0].call(f.exports, function(n) {
                    var t = e[u][1][n];
                    return r(t ? t : n)
                }, f, f.exports, n, e, t, i)
            }
            return t[u].exports
        }
        for (var o = "function" == typeof require && require, u = 0; u < i.length; u++) r(i[u]);
        return r
    }({

    // The rest of the library code ...

我正在使用 istanbul 来尝试实现 100% 的测试覆盖率。我的问题是 UMD 代码片段的某些部分没有经过测试。例如,我没有使用 AMD,所以像下面这样的行永远不会执行:

\\ ...
else if ("function" == typeof define && define.amd) define([], n);
\\ ...

或者

\\ ...
if (!e[u]) {
  var s = "function" == typeof require && require;
  if (!p && s) return s(u, !0);
  if (o) return o(u, !0);
  var c = new Error("Cannot find module '" + u + "'");
  throw c.code = "MODULE_NOT_FOUND", c
}
\\ ...

这使我无法实现 100% 的测试覆盖率。你知道我怎样才能解决这个问题吗?

谢谢!

4

1 回答 1

2

我建议您考虑实施伊斯坦​​布尔的忽略功能。该页面专门讨论了忽略 UMD 包装器,尽管在 browserify 的情况下,您可能需要做额外的工作才能完成此操作,例如在没有包的情况下standalone自己实现 UMD 包装器(使用ForbesLindesay/umd或其他方式)。

于 2015-10-09T17:15:04.107 回答