如何克服笑话“初始化前无法访问”问题?

2024-02-08

设置.js

export default {
  web: {
    a: 1
  },
  mobile: {
    b: 2
  }
};

获取设置.js

import settings from "./settings";

export const getSetting = platform => {
  return settings[platform];
};

getSettings.test.js

import { getSetting } from "./getSetting";

const TEST_SETTINGS = { c: 3 };

jest.mock("./settings", () => {
  return {
    test: TEST_SETTINGS
  };
});

test("getSetting", () => {
  expect(getSetting("test")).toEqual(TEST_SETTINGS);
});

Error

ReferenceError: Cannot access 'TEST_SETTINGS' before initialization

我相信这与吊装有关。有办法解决这个问题吗? jest 是否提供任何其他方法来实现这一目标?

我不想这样做。当模拟数据很大并且在多个测试中使用时,这并不好。

jest.mock("./settings", () => {
  return {
    test: { c: 3 }
  };
});

expect(getSetting("test")).toEqual({ c: 3 });

jest.mock is 自动吊装 https://jestjs.io/docs/en/manual-mocks#using-with-es-module-imports,这会导致之前评估模拟模块TEST_SETTINGS被宣布。

另外,这会导致./settings被嘲笑test命名导出,而预计有默认导出。

它不应该使用临时变量,该值在导入时可用:

import settings from "./settings";

jest.mock("./settings", () => {
  return { default: {
    test: { c: 3 }
  } };
});

...

expect(getSetting("test")).toBe(settings.test);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何克服笑话“初始化前无法访问”问题? 的相关文章

随机推荐

  • 如何在Jenkins中使用ANSIcolor插件?

    我已经为 Jenkins 安装了 ANSI color 插件 在作业中 我已使用默认配置文件 xterm 激活了该插件 我不知道打印到控制台日志时如何对控制台日志的输出进行着色 来自批处理文件的日志 Windows 平台 有关的文档 htt
  • 作为 OpenShift 用户,我可以做什么?

    我目前正在使用虚拟服务器并想尝试一下开放式班次 http openshift redhat com 出去 但我还没有真正了解它是如何工作的 我可以获得我的 网络空间 的 root 访问权限吗 我可以设置服务器操作系统 例如 Debian 7
  • 当从 Java 查询时,Sql Server 会忽略 varchar 列上的索引并进行表扫描

    问题 我有一个 SQL Server 表 其中有一个 varchar 列和数百万行 它已建立索引 从 SQL Server 查询工具中运行查询速度很快 因为它使用索引 当我从 Java JDBCPreparedStatement 运行查询时
  • Django 验证单元测试

    我试图模拟 django contrib auth 验证方法的返回值 该方法在视图的登录方法中调用 有view py代码 def login request if request method POST username get usern
  • 如何更改 Mac OS X 启动板中显示的 Java 应用程序名称

    当我的申请写成Java with SWT运行在OS X 都从下Eclipse和来自jar 它在启动板中的名称为 java 如图所示 在我的代码的开头我调用Display setAppName MyApp 并且菜单栏和菜单项中的应用程序名称是
  • PhoneGap 3.1.0 没有节点/npm 和命令行工具

    是否可以在没有节点包的情况下下载和使用 PhoneGap 3 1 0 由于网络连接受到限制 从 git hub 命令行安装节点 PhoneGap 模块 Cordova 模块和插件很烦人 使用 PhoneGap 2 9 似乎是那么容易和简单
  • 错误:无法构建 gem 本机扩展

    gem install unf ext v 0 0 6 localhost workflow boyun ryan007 gem install unf ext v 0 0 6 Building native extensions This
  • AVMutableComposition 输出冻结在第一个视频的最后一帧

    我正在尝试使用 AVMutableCompositions 将多个剪辑 视频 合并为一个 我已经成功完成了这一操作以及旋转和翻译每条指令 但是 仍然存在一个问题 当第一个剪辑完成时 输出冻结在最后一帧 第一个剪辑的最后一帧 仅当有另一个剪辑
  • 使用 VBA 声明相对于活动单元格的范围

    我需要声明一个相对于活动单元格的范围对象 问题是 每次宏运行时我想要选择的行数和列数都不同 例如 我有两个变量 numRows and numCols 我想选择一个范围 其左上角有 ActiveCell 单元格的行为 ActiveCell
  • 使用 Linq to SQL 进行多线程处理

    由于原始线程 使用 Linq to SQL 进行多线程处理 https stackoverflow com questions 1815537 现在已经很老了 我想我应该就类似的主题发布另一个问题 考虑一个场景 其中 DomainServi
  • Swift:数组内的字典

    Data firstName Foo lastName Bar firstName John lastName Doe 如何使用 swift 数组和字典拥有这种结构 该数据显示数组内的字典 对吧 所以我建议 var persons Arra
  • 从终端中的 url 运行 python 脚本

    我想知道有什么方法可以从终端中的 url www blahblah com script py 执行 python 脚本而不将文件下载到磁盘吗 Thanks 您希望它在客户端上运行 还是在服务器上运行 将返回结果 如果您想在客户端上运行它
  • 使用 REST Api Visual Studio Team Services 更新文件

    有没有办法使用 HTTP 动词更新 Visual Studio 团队服务帐户上项目中的文件内容 类似于在 github 上完成的操作https developer github com v3 repos contents update a
  • 将“最大长度”添加到正则表达式

    如何使用一个属性来扩展已经存在的正则表达式 该属性告诉正则表达式不能超过最大长度 比方说 255 我有以下正则表达式 a zA Z0 9 0 9 1 3 0 9 1 3 0 9 1 3 a zA Z0 9 a zA Z 2 4 0 9 1
  • 导入 Python 模块失败 (http.cookies)

    从我在这里和其他地方的研究中了解到 似乎如果a 模块位于Python搜索路径中或b 包含在Python搜索路径中的包中 则导入命令应该能够查找并导入模块 在下面的交互式脚本中 请注意这两个条件都已满足 http 文件夹包含一个 init p
  • 设置 Linq to NHibernate ADO 命令超时

    如何增加 NHibernate Linq To Sql 中的超时 不是连接超时 而是 ado 命令超时 using ISession session NHibernateHelper OpenSession NHibernateHelper
  • self.window 始终为零

    我目前正在尝试使用窗口控制器显示一个窗口 这就是我所拥有的 NSWindow 子类 import Cocoa import CoreLocation class TweetWindow NSWindow var locationManage
  • 尝试自我更新作曲家时出错

    当我尝试自我更新作曲家时 我收到 权限被拒绝 错误消息 但是当我尝试使用 sudo 执行相同的命令时 我收到错误消息 找不到命令 请帮我 在带有 sudo 的终端中 我输入了composer phar的完整路径 它对我有用 sudo usr
  • GetResponseAsync 不接受取消令牌

    看来 GetResponseAsync 不接受 Async Await 中的cancelToken 所以问题是 如果我需要从响应中收集 Cookie 我该如何取消以下过程 using HttpWebResponse response Htt
  • 如何克服笑话“初始化前无法访问”问题?

    设置 js export default web a 1 mobile b 2 获取设置 js import settings from settings export const getSetting platform gt return