next-i18next 使用 Link 和 jest 进行单元测试错误“无法读取未定义的属性语言”

2024-01-07

next-i18next使用它自己的Link组件与区域设置子路径兼容。

https://github.com/isaachinman/next-i18next https://github.com/isaachinman/next-i18next

当我尝试简单的快照测试时,出现错误Cannot read property language of undefined.

我的组件:

import React from 'react';
import { TFunction } from 'next-i18next';
import { withTranslation, Link } from '../../../i18n';

interface HeaderProps {
  readonly t: TFunction;
}

const Header = ({ t }: HeaderProps): JSX.Element => {
  return (
    <>
      <Flex>
        <Box>
          <Link href="/">{t('home')}</Link>
        </Box>
      </Flex>
    </>
  );
};

export default withTranslation('common')(Header);

这是快照测试:

import React from 'react';
import { render, screen } from '@testing-library/react';
import Header from './Header';

describe('<Header/>', () => {
  test('it should render correctly', () => {
    const { container } = render(<Header />);
    expect(container.firstChild).toMatchSnapshot();
  });
});

测试运行并通过,无需Link组件符合预期。

我已经定义了我的i18n.ts如下:

import path from 'path';
import NextI18Next from 'next-i18next';
import { publicRuntimeConfig } from './next.config';

const { localeSubpaths } = publicRuntimeConfig;

export const nextI18next = new NextI18Next({
  browserLanguageDetection: false,
  defaultNS: 'common',
  defaultLanguage: 'en',
  fallbackLng: 'en',
  otherLanguages: ['fr'],
  localeSubpaths,
  localePath: path.resolve('./public/static/locales'),
});

export const {
  i18n,
  appWithTranslation,
  Link,
  withTranslation,
  Router,
} = nextI18next;

无论如何我可以修复这个错误吗?


您应该使用 i18nextProvider 包装您的测试组件。

Check Jest 中的存根 I18next useTranslation 挂钩不会触发 toHaveBeenCalled https://stackoverflow.com/questions/64036604/stubbing-i18next-usetranslation-hook-in-jest-doesnt-trigger-tohavebeencalled/64068566#64068566

EditI18next 有一种“特殊”语言(cimode)这使得t函数总是返回给定的键,这样在测试中您可以对键而不是值进行断言(可以更改,有时开发人员不能更改)。

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

next-i18next 使用 Link 和 jest 进行单元测试错误“无法读取未定义的属性语言” 的相关文章

随机推荐

  • 将 n 写成 2 的幂和的方法数

    是否有任何算法可以找出有多少种方法可以写入一个数字 例如 n 其幂总和为 2 例如 对于 4 有四种方法 4 4 4 2 2 4 1 1 1 1 4 2 1 1 thanks 假设g m 是把m写成2的幂和的方式的数量 我们用f m k 来
  • 字 OpenXML 。在书签之间遍历 OpenXmlElements

    我需要遍历书签开始和书签结束标记之间的节点 问题似乎分解为树遍历 但我无法确定正确的算法 书签开始和结束元素是非复合节点 没有子节点 并且可以出现在树中的任意深度 书签开始也不保证处于相同的深度 如果您绘制文档的树结构 我想检查开始书签和结
  • 在 x86 程序集中声明数组

    我正在学习汇编 我需要制作一个大数组 我已经研究过如何声明数组 并且遇到了这个 array db 10 dup 其中声明了 10 个未初始化字节的数组 我尝试了这个并尝试组装它并得到 错误 操作数 1 之后需要逗号 我意识到 x86 不支持
  • 将div的内容保存到本地存储,并显示在另一个页面上

    我正在尝试获取 a 的内容 div 在页面加载的页面上 并将其保存到本地存储 当有人再次访问主页时 我想要这个内容div要显示 虽然我可以让函数与表单输入字段和提交一起使用 但我找不到仅使用内容和页面加载来使其工作的方法 任何帮助表示赞赏
  • 在 Pandas 中使散点图的标签垂直和水平

    我在用着Pandas绘制散点图矩阵 from pandas tools plotting import scatter matrix 问题是列中的名称DataFrame太长了 我需要它们在 x 轴上垂直 在 y 轴上水平 这样它们才能适合
  • Putty 谷歌云计算

    我对谷歌云和腻子很陌生 我的问题是当我在计算机上打开 putty 并在 putty 中输入外部 IP 时 我的屏幕打开并要求我登录 我的问题是我要输入什么才能登录 这是谷歌用户名帐户吗 更好的问题是我在哪里可以找到登录虚拟机所需的登录名和密
  • 如何将日期时间格式化为数据表中的特定日期格式

    在我的 datagridview1 中 日期列显示格式 MM dd yyyy hh mm ss 然后我使用这段代码 我使用一个函数来填充这样的 datagridview public void load table DataTable lt
  • 在 Redis 中使用嵌套对象?

    假设我有一个嵌套属性可以更改的哈希值 key1 prop1 subprop1 could change 如果我收到以下信息prop1 subprop1已更改 我可以对此属性执行原子更新吗 现在node redis saves prop1作为
  • 使用 Roslyn 拆分表达式语句

    我正在开发一个可以改写的应用程序CSharp代码 我正在这样做Roslyn 我面临着一个问题splitting expressions 样板课 class Program static void Main string args float
  • 如何自定义 git rebase --interactive 提交消息的格式?

    我使用 git 进行本地工作 并且非常喜欢它 并且遵循类似于中描述的工作流程本文 http reinh com blog 2009 03 02 a git workflow for agile teams html 所以基本上 当开始一个新
  • 分形编程[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取所有系统壁纸

    有没有办法以编程方式获取所有android系统壁纸 我知道如何通过WallpaperManager 然后将其保存到磁盘 但我想知道是否有一种方法可以访问操作系统中包含的所有用作系统壁纸的图片 所有壁纸都位于启动器应用程序中 由于启动器的名称
  • 如何在 Vue Web 组件中使用 vue-i18n?

    我正在使用 vue cli 3 创建一个 Vue Web 组件 target wc选项 我还需要该组件来使用 vue i18n 插件 这需要将一些选项传递给主 Vue 实例 如下所示 new Vue i18n new VueI18n 在常规
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/JDBC_DBO]]

    我收到此 Tomcat 错误 Sep 09 2012 4 16 54 PM org apache catalina core AprLifecycleListener init Information The APR based Apach
  • 如何创建脚本来查询 Google 浏览器位置

    我正在尝试找出一种从 Google 浏览器位置 API 获取地理位置数据的方法 我发现JSON CURL 和 Google 的地理定位 https stackoverflow com questions 13433901 json curl
  • iOS 8 上弹出窗口中的 UIDatePicker 问题

    还有其他人在 iOS 8 上的弹出窗口中遇到 UIDatePickers 问题吗 突然我们的日期选择器无法正确显示 参见屏幕截图 似乎选择器的一部分没有显示 不过 您仍然可以与缺失的部分交互来更改时间 我做了一些测试 日期选择器在其他视图中
  • 在draw_networkx可视化中突出显示节点而不更改节点颜色

    我正在使用 NetworkX 来可视化包含超过 1000 个节点的大型图 作为可视化的一部分 我希望能够突出显示某些节点 我见过这个问题 https stackoverflow com questions 27030473 how to s
  • 控制台上的 gcc 编译输出消息中出现奇怪的字符

    当我使用 gcc 构建 C 代码时 在 Ubuntu 10 04 x32 位系统上的 bash shell 下生成如下 Makefile gcc 输出消息在输出消息中包含一些不需要的字符 见下文 test dualboot desktop
  • 如何以编程方式添加安全区域

    当你打开视图时 它将如下图所示 iPhone x 打开视图 https i stack imgur com GJ8uy png iPhone 8 打开视图 https i stack imgur com Y1T74 png 对于 iphon
  • next-i18next 使用 Link 和 jest 进行单元测试错误“无法读取未定义的属性语言”

    next i18next使用它自己的Link组件与区域设置子路径兼容 https github com isaachinman next i18next https github com isaachinman next i18next 当