gpt4 book ai didi

jestjs - 如何使用 jest 和 babel v7 避免 "TypeError: Cannot set property"错误?

转载 作者:行者123 更新时间:2023-12-04 08:50:42 27 4
gpt4 key购买 nike

我有一个项目要从 babel v6 升级到 babel v7。让它工作并不难,但我在单元测试代码中遇到了一些问题。

工作代码 foo.js 像下面。

import foo from './bar';
export {foo};

当我尝试在单元测试代码中模拟它时。
import * as Foo 'path/to/foo.js';
Foo.foo = jest.fn().mockReturnValue('whatever');

它失败并出现错误:
TypeError: Cannot set property foo of #<Object> which has only a getter

事实证明,babel v7 做的转译与 v6 不同。它编译 foo.js 进入:
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "foo", {
enumerable: true,
get: function get() {
return _bar.default;
}
});

foo 被定义为 的 getter-only 属性导出 ,它不能操作导出的 foo 没有了。

暂时就换 foo.js 避免这种转译。我想知道这是否是禁用此类转换的任何 babel 配置。有任何想法吗?

最佳答案

在 Babel 7 中,您可以通过启用 "loose" mode in @babel/preset-env 来禁用此行为。 .如果你只想在你的测试环境中使用这种行为,你可以在你的 babelrc/babel.config.js 中进一步设置配置范围。

babel.config.js

module.exports = {
env: {
production: {
presets: [
[
'@babel/preset-env',
{ loose: false },
],
],
},
test: {
presets: [
[
'@babel/preset-env',
{ loose: true },
],
],
},
},
}

loose transformation .

关于jestjs - 如何使用 jest 和 babel v7 避免 "TypeError: Cannot set property"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256801/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com