使用 Jest 模拟命名导入

2023-12-08

我有一个“notifications.js”模块,看起来有点像这样:

import { Notifications, Permissions } from 'expo'

export function setLocalNotification(storage = AsyncStorage) {
  return storage
    .getItem(NOTIFICATION_KEY)
    .then(JSON.parse)
    .then(data => {
      if (data === null) {
        return Permissions.askAsync(
          Permissions.NOTIFICATIONS
        ).then(({ status }) => {
          if (status === 'granted') {
            Notifications.cancelAllScheduledNotificationsAsync()
            ...etc.

在我的测试中,我想模拟权限和通知,以便我可以在 notification.spec.js 中执行类似的操作:

import { setLocalNotification } from './notifications'
import mockAsyncStorage from '../mock/AsyncStorage'

it('correctly cancels pending notifications', done => {
  setLocalNotification(mockAsyncStorage).then(done())
  expect(Permissions.askAsync).toBeCalled()
  expect(Notifications.cancelAllScheduledNotificationsAsync)
    .toBeCalled()
})

我尝试过使用各种方法jest.mock and jest.setMock但我似乎无法让这个工作。我如何以所需的方式模拟这些命名导入?例如,我尝试过这个:

jest.setMock('Permissions', () => ({
  askAsync: jest
    .fn()
    .mockImplementationOnce(() => ({ status: 'granted' }))
}))

但这是行不通的。它抛出

'module Permissions cannot be found from notifications.spec.js'

如果我尝试模拟整个 expo 模块,则模拟的函数expect().toBeCalled()返回假。


你必须模拟模块'expo'

jest.mock('expo', ()=>({
  Permissions: {
     askAsync: jest.fn()
  }
}))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jest 模拟命名导入 的相关文章

随机推荐

  • AndroidJAVAClass 无法执行我的非静态函数

    我从我的统一代码中调用了java函数 我的 java 类中有静态和非静态类型的函数访问第一个静态函数 我用了 AndroidJavaClass plugin new AndroidJavaClass com android test Tes
  • matplotlib widgets Slider demo源码讲解

    我试图理解源代码能够使用 matplotlib 的滑块小部件 定义函数的代码段update 真的很困扰我 我不明白争论有什么意义val in def update val 以及值val没有在任何地方提到 这是同样的问题def reset e
  • 如何增加netbeans中的java堆大小?

    我正在尝试在 netbeans 中用 java 构建一个近 110000 个单词的词典 trie 我的代码运行良好 但出现异常 如下所示 Exception in thread main java lang OutOfMemoryError
  • 等待子窗口加载完成

    是否有一个简单的挂钩来检测脚本打开的窗口是否已完成加载 基本上 我想要相当于onLoad 钩子 但我无法直接设置它 假设子文档是给定的 并且我实际上无法在其中放入我自己的任何代码 例如 假设我有以下两个文件 parent html
  • 无法在不扰乱重力的情况下翻转球的方向

    我正在制作一款类似乒乓球的游戏 只不过只有一个球拍并且球以抛射运动移动 目标是让球尽可能长时间地在球拍上弹跳 当球被球拍击中时 y其速度分量的符号翻转 问题是重力也作用在球上 因此当球向上击打时 由于重力的反向作用 球会加速 这是球类的代码
  • 将 SORM 与 Play Framework 结合使用会导致引发反射异常

    我一直在尝试让 SORM 与 Play Framework 2 2 SNAPSHOT 以及 2 1 1 一起使用 目前 我正在尝试运行我创建的简约示例应用程序 以便更轻松地追踪问题 不幸的是 我收到的错误消息对我没有任何帮助 val app
  • Google Cloud Function - 错误:ENOENT:没有这样的文件或目录

    我正在尝试执行一个简单的功能来调整存储中新上传的图像的大小 我使用以下方法来帮助我做到这一点 import tmpdir from os import join dirname from path import as sharp from
  • OpenGL 着色器的显式与自动属性位置绑定

    当为 OpenGL 着色器程序设置属性位置时 您面临两个选项 glBindAttribLocation 在链接之前显式定义属性位置 or glGetAttribLocation 链接后获得自动分配的属性位置 使用其中一种比另一种有什么用处
  • 模拟过程中会话丢失

    我使用 SonataAdminBundle 并配置了sonata user in config yml sonata user impersonating route profile logged more config 我的管理面板位于
  • UITableview:如何禁用某些行而不是其他行的选择

    我正在组中显示tableview从 XML 解析的内容 我想禁用它的点击事件 我根本不应该点击它 该表包含两组 我只想禁用第一组的选择 而不禁用第二组的选择 单击第二组的第一行navigates到我的管子player view 如何才能只选
  • Android:ScrollView 内的 Listview

    我想要一个可以滚动的布局和其中的列表视图 列表视图将根据其中的项目数量扩展其高度 只有外面的ScrollView是可滚动的 这是我的代码
  • req.user 在 Google Passport 策略中不可用

    我有一个快速应用程序 它通过 Passport 管理身份验证 最初使用本地策略 为此 我刚刚添加了 Google 登录 帐户创建 几乎一切都按照文档进行 我遇到的问题是 用户可以使用 Google 策略创建帐户 但我无法完全理解它 以便经过
  • 如何路由 /About 到 /Home/About

    我刚刚开始使用 ASP NET MVC 这太棒了 但是 我不太明白设置路线 如何将 About 路由到 Home About 视图 主页 About aspx 我希望能够通过以下方式访问它 首页 关于要不就 About 如果你想明确地为其设
  • 预填充 Django 表单

    我试图从查询中获取 Django 表单 但我一直以错误的方式进行操作 检查了几个例子 但我做的有点不同 这是我的代码 Le Form class ItemForm ModelForm class Meta model Item exclud
  • 我可以通过多边形绑定 st_distance 调用吗?

    我看过关于这个主题的类似帖子 例如 here and here 但不是 sf tidyverse 生态系统特有的 I have a series of lakes a series of sample points within each
  • 在 Firebug 中查看 CSS 伪元素

    是否有任何解决方法可以查看 CSS 伪元素 例如 after before等 称为CSS3 生成和替换的内容模块 在萤火虫中 现在 当我选择一个元素时 我只能看到应用于它的静态 CSS 我没有看到使用样式应用于它 after and bef
  • ANSI 颜色集图形渲染在批次中中断并在继续后工作

    我有一个批处理 其中有一个子部分 该子部分迭代 EXE 文件的行以尝试运行 然后该批处理根据 EXE 的退出代码对 EXE 进行排序 由于某种原因 ANSI SGR 在设置前一个图形渲染而不是重新渲染后似乎会破坏或回显文字文本 我回去重新参
  • 如何对 pandas 数据帧上的最大和最小时间戳进行分组

    我想对数据集进行分组并返回最大和最小时间戳 这是我的数据 id timestamp 1 2017 09 17 10 09 01 2 2017 10 02 01 13 15 1 2017 09 17 10 53 07 1 2017 09 17
  • 如何激活全屏控制DOTS(SDK14)

    有人知道我的意思吗 在我的 Galaxy Nexus 上的新相机应用程序的全屏模式下 控制按钮变为 3 个点 我如何以编程方式激活它 您可以使用 getWindow getDecorView setSystemUiVisibility Vi
  • 使用 Jest 模拟命名导入

    我有一个 notifications js 模块 看起来有点像这样 import Notifications Permissions from expo export function setLocalNotification storag