1

我想以这种方式注入谷歌,这样我就可以在 runner.js 中注入我自己的谷歌模拟,以便在我不想要 http 调用的地方进行单元测试。

 paths: {
        lib: 'lib',        
        async: 'lib/async',
        google: 'async!http://maps.google.com/maps/api/js?sensor=false'
    },

define(['google'], function(google) {

});

谷歌总是未定义的。

当我使用这样的定义时,它可以工作:

define(['async!http://maps.google.com/maps/api/js?sensor=false'], function(google) {

    });

但是我不能那样使用它,因为 goodle 在生产代码中被硬编码为字符串。这样我就不能在 runner.js 路径定义的单元测试中注入我自己的谷歌模拟......

为什么第一种方法不起作用?

4

1 回答 1

0

Google 库不实现模块模式。它们将所有功能暴露给全局 google 变量。在您的模拟库中,只需模拟全局可访问的 google 变量上的所有内容。解决方法是包含 shim 配置,以便在加载时,RequireJS 知道要传递给您的模块:

requirejs.config({
    // ...
    shim: {
        'google': {
            exports: 'google'
        },
    }
});

在上面的示例中,您说当 google 模块加载时,将全局 window.google 变量作为模块引用传递给您的模块。

于 2013-05-21T21:01:18.523 回答