使用 vitest 测试 Nuxt3 内的 Pinia 存储会抛出“useRuntimeConfig”未定义

2023-12-03

我正在测试 pinia 商店nuxt3 app.

Inside setup()我正在使用的商店useRuntimeConfig从公共配置变量获取计数器的初始值,我收到此错误ReferenceError: useRuntimeConfig is not defined不知道如何解决

// store/counter.ts

...
state: () => {
    const runtimeConfig = useRuntimeConfig()
    const count = runtimeConfig.public.count
    return {
      ...
      count
      ...
    }
  },
...

code

// store/counter.test.ts

import { fileURLToPath } from 'node:url'
import { describe, expect, it, beforeEach } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
import { useCounter } from './counter'
import { setup } from '@nuxt/test-utils'

await setup({
  rootDir: fileURLToPath(new URL('../', import.meta.url)),
  server: true,
  browser: true,
})

describe('Counter Store', () => {
  beforeEach(() => {
    // creates a fresh pinia and make it active so it's automatically picked
    // up by any useStore() call without having to pass it to it:
    // `useStore(pinia)`
    setActivePinia(createPinia())
  })

  it('increments', () => {
    const counter = useCounter()
    expect(counter.n).toBe(0)
    counter.increment()
    expect(counter.n).toBe(1)
  })

  it('increments by amount', () => {
    const counter = useCounter()
    counter.increment(10)
    expect(counter.n).toBe(10)
  })
})


这看起来与我今天刚刚解决的问题相似。希望它也对您有帮助:

  1. 在您的组件中,在本例中为 Pinia 存储模块,添加 useRuntimeConfig 的显式导入,如下所示:

    import { useRuntimeConfig } from '#imports'

目前,除了手动导入包之外,我没有更好的方法来解决包“未定义”的问题。随着 Nuxt3 的进展,我希望看到测试变得更加受关注。文档似乎建议从“#app”导入它,但我无法让它以这种方式工作,“#imports”似乎是更合适的别名。

  1. 在您的 vitest.config.js 中,添加映射的别名#imports打包到隐藏的 nuxt 文件。 vitest.config.js 文件的示例如下:
export default defineConfig({
  test: {
    // other test specific plugins
  },
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './'),
      '~': path.resolve(__dirname, './'),
      '#imports': path.resolve(__dirname, './.nuxt/imports.d.ts')
    }
  }
})
  1. 在您的测试文件中,使用 vi.mock() 函数来模拟#imports包裹。
 vi.mock('#imports', () => {
    return {
      useRuntimeConfig() {
        return {
          public: {
            // Your public config!
          }
        }
      }
    }
  })

这使我能够在测试级别模拟 runtimeConfig - 希望它也对您有帮助!祝你好运:D

For anybody reading this wanting to achieve a similar thing in Jest, this is the GitHub discussion that helped me figure this solution out. Unfortunately the discussion I used to create this solution no longer exists. (404)

编辑:如果您需要在逐个测试的基础上更改模拟返回值,您可以返回在其他地方定义的对象并更改测试中该对象的值。

i.e.

    let storeMock = {
       user: {
         getUsername: 'Jane Doe',
         setUsername: vi.fn()
       }
    }

    vi.mock('#imports', () => {
        return {
           useNuxtApp: vi.fn().mockImplementation(() => ({
               $store: {
                   ...storeMock
               }
           })),
        }
    })

    // In your test
    storeMock = {
        user: {
            getUsername: 'Janet Van Dyne',
            setUsername: vi.fn()
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 vitest 测试 Nuxt3 内的 Pinia 存储会抛出“useRuntimeConfig”未定义 的相关文章

随机推荐

  • Asp.net cookieless sessionId url 位置

    我正在开发一个移动网站 我们不能依靠手机访问该网站来获得 cookie 支持 我正在对会话使用 cookieless 选项 想知道是否有办法指定 sessionId 在 URL 中的放置位置 现在看起来是这样的 http www somes
  • NASM:远程调用,段和偏移量存储在寄存器中

    我已经将代码段和偏移值存储在两个寄存器中 比如说AX and BX分别 在 NASM 中 我如何编码远程调用AX BX 我试过call AX BX 但我得到了错误invalid combination of opcode and opera
  • 用 Pandas 数据框中尽可能少的日期填充缺失的日期值

    我有一个带有日期列的数据框 df pd DataFrame date 2014 10 01 np nan 2015 09 30 np nan np nan 2019 06 03 现在我想用 pandas 中尽可能少的日期值来估算缺失的日期值
  • 在 Spritekit 中取消暂停视图时,fps 显着下降

    当在 SpriteKit 中取消暂停视图时 我注意到 fps 显着下降 帧速率下降在 5 10fps 之间 我用空项目 Spritekit 游戏模板 尝试了这个 这是代码 if self view paused self view paus
  • 设置运输跟踪号码后以编程方式发送电子邮件

    我正在寻找一种在将跟踪号码分配给订单时以编程方式向用户发送电子邮件的方法 我需要能够以编程方式执行此操作 因为我正在使用外部源来填充跟踪信息 我想我在这里真正寻找的是一个特定的触发器或事件 我可以用它来触发通常在管理员单击 发送跟踪信息 按
  • PHP 警告:mysqli_connect(): (HY000/2002):连接被拒绝

    我正在使用 PHP 5 5 和 MAMP 从下载here 我有一个像这样的基本脚本 当我运行这个脚本时 我收到此错误 PHP Warning
  • 变量“a”的范围是什么?

    可能的重复 Python变量作用域问题 Python 手册将范围定义为 范围定义了块内名称的可见性 如果是本地人 变量在块中定义 其范围包括该块 如果 定义发生在功能块中 范围扩展到任何块 包含在定义块中 除非包含块引入 名称的不同绑定 我
  • 无法使编辑功能正常工作

    我有两个型号Employee and Overtime Definition协会是这样设置的 Employee class Employee lt ActiveRecord Base has many overtime definition
  • 在 Excel 中查询不带标题 - Oracle

    是否可以将数据导出到不带标题的 Excel 工作表中 我知道 SET HEAD OFF 在 SQL Developer 中有效 例子 出发 选择数量 客户 来自客户 但是 如果我使用 Microsoft Query 向导和 ODBC 如何在
  • 在集合视图中为 UIswitch 编写事件

    您好 我正在尝试在 UI 集合视图中编写 UI 切换和 UI 分段控制的事件 我在集合视图单元格中声明了 UIswitch 和 UIsegmentation 控件 interface CollectionViewCell UICollect
  • 如何使用 REGEX 将文本拆分为块,并在特定字符上断开?

    我希望将长文本分成最多 1000 个字符的块 为了在每个块中获取尽可能多的字符 但重要的是我想在换行符中完成每个块 以避免中间的单词分割 如果所有 1000 个字符中没有一个换行符 那么我的正则表达式仍然会捕获一个单词 并将其拆分为 2 个
  • 角度 6 ng-空闲

    我有一个运行良好的 Angular 项目 我正在实施 NG IDLE 和 KeepAlive 以便保持会话新鲜并在 API 会话过期之前注销用户 我的问题是 ng idle 也在登录页面上运行 这显然不是必需的 因为当它超时时 它会将用户带
  • EJB3 与 Spring

    我了解到 如果我在 Spring 上下文中使用 EJB 我将获得与在 纯 EJB3 环境中使用它相同的好处 这是真的吗 我用谷歌搜索过 但找不到明确 明确的答案 例如 假设我有一个会话 bean 它更新数据库中的某些表 并且它抛出系统异常
  • 我的应用如何跳转到iOS默认邮箱?

    我想在我的应用程序中设置一个按钮 如果单击该按钮 应用程序可以跳转到iOS的默认邮箱 我想这样做 以便用户可以检查和发送他们的邮件 此功能是否需要私有 API 或者 Apple 禁止这样做 预先感谢您的帮助 这就是你想要的 let app
  • asp.mvc模型设计

    我对 MVC 还很陌生 我正在寻找一种设计模型的方法 我有 MVC 网站项目和另一个负责数据访问和构建业务对象的类库 如果我在该程序集中有一个名为 Project 的类 它是一个业务对象 并且我需要在视图中显示所有项目 我应该创建另一个模型
  • 在排序数组中查找总和为 K 的一对整数

    给定一个已排序的整数数组 我们如何找到一对总和为 K 的整数 e g array 1 3 5 6 10 K 6 答案是1和5 时间复杂度应该最小化 您可能想看看这篇博文 http www codingatwork com 2011 07 a
  • JTable 单元格颜色

    有人可以给我一个如何获取 JTable 中特定单元格的背景颜色的示例吗 我无法找到如何执行此操作的示例 有很多关于获取单元格中的值的示例 但不是获取单元格的背景颜色 它应该类似于以下内容 根据所有评论修复 重要提示 使用 table pre
  • 如何使用 GWT - RPC 到 Tomcat 服务器

    安装Tomcat 6 安装Eclipse GWT插件 使用示例创建了 GWT 项目 生成的代码 已编译的GWT项目 GWT编译 复制战争 编译 目录 eclipse的工作区到TOMCAT webapps ROOT 文件夹 在我的浏览器中运行
  • Jquery 检查数组是否包含重复字符串

    如何检查数组是否包含重复的字符串 我使用了 validateArray sa sa yu 以下功能来自 SO 但同样不适合我 checkDuplicate function reportRecipients if reportRecipie
  • 使用 vitest 测试 Nuxt3 内的 Pinia 存储会抛出“useRuntimeConfig”未定义

    我正在测试 pinia 商店nuxt3 app Inside setup 我正在使用的商店useRuntimeConfig从公共配置变量获取计数器的初始值 我收到此错误ReferenceError useRuntimeConfig is n