【问题标题】:Upgrading Babel from 6 to 7 breaks test stubs将 Babel 从 6 升级到 7 会破坏测试存根
【发布时间】:2020-05-15 06:57:26
【问题描述】:

我正在将 Babel 从 6.26.0 升级到 7.8.3,我的一些测试现在正在中断。看来新版本在升级后阻止了导出的函数被Sinon存根。

我需要在升级过程中使用配置设置或插件来获得旧的行为吗?

下面是一个失败的测试示例:

it('a calls b', function () {
  bStub = sinon.stub(B, 'default');
  a.do();
  expect(bStub.calledOnce).to.be.true; // this used to be true but no is now false
});

这些函数大多很简单,但我添加了一些日志记录代码,看起来 B() 在使用旧版本的 Babel 时按预期进行存根,但它不再成功存根,而是调用了实际的 B() 函数。

实际测试功能: 一个.js

A.do = function () {
  return B();
};

export default A;

还有被存根的函数调用: B.js

export default function B () {
  ...
};

我在升级过程中所做的一些配置更改:

项目.json

  "devDependencies": {
+    "@babel/cli": "^7.8.3",
+    "@babel/core": "^7.8.3",
+    "@babel/preset-env": "^7.8.3",
-    "babel-cli": "^6.5.1",
-    "babel-core": "^6.26.0",
-    "babel-loader": "^7.1.2",
-    "babel-preset-es2015": "^6.5.0",
+    "babel-loader": "^8.0.6",
  ...
}

.babelrc

 {
-  "presets": ["es2015"]
+  "presets": ["@babel/preset-env"]
 }

webpack.config.json

 module: {
   rules: [
     {
       test: /\.js$/,
       exclude: /node_modules|scripts|dist|build\//,
       use: {
         loader: 'babel-loader',
         options: {
-            presets: ['es2015']
+            presets: ['@babel/preset-env']
         }
       }
     }
   ]
 }

谢谢!

【问题讨论】:

    标签: javascript babeljs


    【解决方案1】:

    通过向 babel-loader 添加一个额外的 modules 配置设置,我能够再次完成这项工作。我的测试现在按预期通过了。

    我能够使用 umdcommonjs 值让测试通过,但我最终选择了 commonjs,因为它与以前版本的默认值最兼容(尽我所能告诉)。

    webpack.config.js

    {
    ...
            use: {
              loader: 'babel-loader',
              options: {
                presets: [["@babel/preset-env", { "modules": "commonjs" }]]
              }
            }
    ...
    };
    

    【讨论】:

      【解决方案2】:

      有什么更新吗?这里的情况完全一样。有人能解释一下吗?

      除了我还必须执行以下操作 - 安装再生器 & core-js@3。如Link

      对于这个问题 - regeneratorRuntime 没有定义Link

      这两种方法都试过了—— Link1

      你可以直接导入“core-js”或者使用@babel/preset-env 的useBuiltIns 选项。

      Link2

      赞成直接包含 core-js/stable(以填充 ECMAScript 功能)和 regenerator-runtime/runtime

      已提及Ref1Ref2Ref3Ref4

      最后,似乎无法识别 sinon stub 行为 -

      类型错误:_common__WEBPACK_IMPORTED_MODULE_1__.functionName.withArgs 不是函数

      在调试时,测试中不会捕获存根行为。

      【讨论】:

      • 答案有我找到的解决方案,我希望它也适用于你。
      • 上面的答案很完美!此外,在正常构建中使用了以下 webpack 配置(测试/覆盖除外){ loader: "babel-loader", options: { presets: [ [ "@babel/preset-env", { useBuiltIns: "usage", corejs: { version: 3, proposals: false }, modules: "umd" } ] ] } }
      猜你喜欢
      • 2016-04-02
      • 2019-03-11
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多