我正在使用TypeScript,Mocha(带有mocha-typescript插件(进行测试,WebPack用于构建我的应用程序。
最近,我决定为 WebPack 添加 DefinePlugin 来分隔生产和开发环境的配置:
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 退出"。
是否有可能将它们结合在一起?还是我应该使用另一种方式进行测试?
好的,因为我最终得到了我以错误的方式使用它。
在webpack.config.js 中设置与 Node 相关的变量更正确:
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 中执行的,而不是在浏览器中执行的(。