2013-05-21 58 views
1

我想注入谷歌這種方式,我可以注入我自己的谷歌模擬在runner.js單元測試,我不想http調用。RequireJS不接受config`s路徑聲明中的URL``

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路徑定義的單元測試...

爲什麼第一種方式不工作?

回答

0

Google庫不實現模塊模式。他們向全球谷歌變量公開所有功能。在你的模擬庫中,只需模擬全局可訪問的谷歌變量上的所有內容即可。解決辦法是包括墊片配置,以便加載時,RequireJS知道什麼傳遞給你模塊:

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

在樣品上你說,當谷歌模塊加載,通過全球window.google變量作爲一個模塊參考到你的模塊。