2017-06-17 155 views
0

我正在使用TypeScript,Mocha(用mocha-typescript插件)進行測試,並在我的應用程序中構建WebPack。測試:摩卡+打字稿+ webpack

最近我決定增加DefinePlugin爲的WebPack爲督促和開發環境上分開CONFIGS:

import { AppSettings as DevSettings } from './appSettings.dev' 
import { AppSettings as ProdSettings } from './appSettings.prod' 

declare var __ENVIRONMENT__: string; 

let settings = __ENVIRONMENT__ === 'prod' ? ProdSettings : DevSettings 

export let AppSettings = settings; 

在片段上方有一個全局變量__ENVIRONMENT__,這有助於選擇設置,我想用。此變量webpack.config.js定義如下:

module.exports = function(env) { 
    var config = { 
     // ... 
     plugins: [ 
      new ExtendedDefinePlugin({ 
       __ENVIRONMENT__: env === 'prod' ? 'prod' : 'dev', 
      }) 
     ] 
     // ... 
    } 

    return config; 
} 

所以我改變測試執行中的package.json到

"test": "webpack --env=dev && mocha --recursive" 

如果我稱之爲「測試」,摩卡拋出錯誤(的WebPack建立文件正確):

ReferenceError: __ENVIRONMENT__ is not defined 

測試觀察家也將無法正常工作:

"test-watch": "mocha-typescript-watch" 

拋出錯誤「退出1」。

是否有可能將它們一起使用?或者我應該用另一種方式進行測試?

+0

DefinePlugin應該在構建輸出中將'__ENVIRONMENT__'用'prod'或'dev'字面替換 - 您確定替換對瀏覽器有效嗎? – Catalyst

+1

@Catalyst,是的。但這不是這種情況的根本原因 - 我只是不完全理解摩卡和webpack的概念。 – user1820686

回答

1

好吧,因爲我最終得到了我以錯誤的方式使用它。

它更正確地建立在webpack.config.js有關節點變量:

module.exports = function(env) { 
    var config = { 
     // ... 
     plugins: [ 
      new ExtendedDefinePlugin({ 
       'process.env': { 
        'NODE_ENV': env === 'prod' ? 'prod' : 'dev', 
       } 
      }) 
     ] 
     // ... 
    } 

    return config; 
} 

而且用它在有需要時,如:

declare var process: any; 

export let AppSettings = process.env.NODE_ENV === 'prod' ? ProdSettings : DevSettings; 

因此我摩卡測試運行良好(因爲它們在Node中執行,而不是在瀏覽器中執行)。

+0

我不明白它是什麼讓你的代碼工作。 NODE_ENV?作爲一個字符串?是「process.env」節點可以識別的東西嗎? – RicardoGonzales