Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何正确地嘲笑i18n_Reactjs_React Native_Mocking_Jestjs_I18next - Fatal编程技术网

Reactjs 如何正确地嘲笑i18n

Reactjs 如何正确地嘲笑i18n,reactjs,react-native,mocking,jestjs,i18next,Reactjs,React Native,Mocking,Jestjs,I18next,我在react native中有一个容器,它导入了我们通常存储在utils目录中的典型函数,例如capitalieword()或其他什么 该utils模块的一个函数使用t,因此我们在utils文件夹中导入i18n,以便能够使用t 我们在i18n中使用languageDetector来检测用户的移动语言。因为languageDetector需要deviceLocale(例如英国、美国、NL等),并且Jest运行在不同的上下文中,如果我尝试测试容器,我将得到无法读取未定义的属性“deviceLoca

我在react native中有一个容器,它导入了我们通常存储在
utils
目录中的典型函数,例如
capitalieword()
或其他什么

utils
模块的一个函数使用
t
,因此我们在
utils
文件夹中导入
i18n
,以便能够使用
t

我们在
i18n
中使用
languageDetector
来检测用户的移动语言。因为
languageDetector
需要
deviceLocale
(例如英国、美国、NL等),并且Jest运行在不同的上下文中,如果我尝试测试容器,我将得到
无法读取未定义的属性“deviceLocale”

因此,我创建了一个手动
\uuuumocks\uuuuuu
目录(作为状态),并创建了自己的
i18n
,它只是手动注入
deviceLocale
字符串,以便能够运行测试

结果表明,该测试忽略了
\uuuuuu mocks\uuuuu/i18n
,并直接指向原始测试。。。你知道会出什么问题吗

还有我的jest配置在
package.json中

原始
i18n.js

mocked
i18n.js
(注意
languageDetector
内的
detect
键已被手动模拟)

待测部件

utils.js

Comp.test.js

错误:
我认为问题不在于模拟,而在于导入!在注入模拟之后,尝试在测试中要求组件:

import React from 'react';
import { shallow } from 'enzyme';

jest.mock('../../config/i18n');

describe('<Comp />', () => {
  it('must match the snapshot', () => {
    // Require here instead of importing on top
    const Comp = require("./Comp").default;

    // state and props properly set up
    const wrapper = shallow(<Comp />);
    expect(wrapper).toMatchSnapshot();
  });
});
从“React”导入React;
从“酶”导入{shall};
jest.mock('../../config/i18n');
描述(“”,()=>{
它('必须与快照匹配',()=>{
//此处需要,而不是在顶部导入
const Comp=要求(“./Comp”)。默认值;
//正确设置状态和道具
常量包装器=浅();
expect(wrapper.toMatchSnapshot();
});
});
我在本地尝试了这个方法,效果很好:模块被模拟了。我简化了很多我的例子,所以也许你会遇到一些新的错误,但从技术上来说,这应该可以解决你的问题


编辑:将我的工作示例推送到github,以防需要任何帮助。

感谢您的回复!1和2都已正确设置。我已经按照要求更新了OP中的一些信息。再次感谢。再看一眼。。这并不重要,但你是不是漏掉了一条斜线?不是真的。好吧,我的错!我想到了两种解决方案:1您只需模拟您的组件。您可以在单独的测试中测试utils函数,这样在测试组件时就可以想当然了。或者2,你看过modulenamemapper吗?请你详细介绍一下第一个好吗?我不知道如何才能实现这一点。大约在2号,我像这样添加了它,但我有这个错误