【问题标题】:Testing: mocha + typescript + webpack测试:mocha + typescript + webpack
【发布时间】:2017-06-17 11:39:15
【问题描述】:

我使用 TypeScript、Mocha(带有 mocha-typescript 插件)进行测试,使用 WebPack 构建我的应用程序。

最近我决定为 WebPack 添加 DefinePlugin 来分离 prod 和 dev 环境的配置:

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;

在上面的 sn-p 中有一个全局变量 __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"

如果我调用“test”,mocha 会抛出错误(webpack 正确构建文件):

ReferenceError: __ENVIRONMENT__ is not defined

测试观察者也不起作用:

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

抛出错误“Exited with 1”。

有没有可能让他们一起工作?或者我应该使用其他方式进行测试?

【问题讨论】:

  • DefinePlugin 应该在构建输出中将 __ENVIRONMENT__ 替换为 'prod' 或 'dev' - 您确定该替换对浏览器有效吗?
  • @Catalyst,是的。但这不是这种情况的根本原因——我只是没有完全理解 mocha 和 webpack 的概念。

标签: typescript webpack mocha.js


【解决方案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;

因此我的 Mocha 测试运行良好(因为它们是在 Node 中执行的,而不是在浏览器中)。

【讨论】:

  • 我不明白是什么让你的代码工作。 NODE_ENV?作为一个字符串? “process.env”是节点可以识别的东西吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2019-03-14
  • 1970-01-01
  • 2015-11-29
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多