当前位置: 首页 > 知识库问答 >
问题:

如何提升一个笑话依赖模仿实际依赖?

太叔飞翰
2023-03-14
FAIL  src\modules\languageProvider\__tests__\LanguageProvider-test.js
  ● renders correctly

    TypeError: _this.strings.setLanguage is not a function

      at LanguageStore.setLanguage (src\modules\languageProvider\LanguageStore.js:25:15)
      at new LanguageProvider (src\modules\languageProvider\LanguageProvider.js:30:16)
import { View } from 'react-native';
import React from 'react';
import { shallow } from 'enzyme';
import renderer from 'react-test-renderer';
import connect from '../connect.js';
import LanguageProvider from '../LanguageProvider';
import LanguageStore from '../LanguageStore';

it('renders correctly', () => {

  const TestComponent = connect(Test);
  const strings = { test: 'Test' };
  const language = "en"

  const stringsMock = {
    setLanguage: jest.fn()
  };

  const mockSetLanguage = jest.fn();
  jest.mock('../LanguageStore', () => () => ({
    language: language,
    strings: stringsMock,
    setLanguage: mockSetLanguage,
  }));

  const wrapper = shallow(<LanguageProvider strings={strings} language="en"><Test /></LanguageProvider>);

  expect(wrapper.get(0)).toMatchSnapshot();

});


class Test extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <View />;
  }
}

https://github.com/brianjvarley/react-native-prototyping/blob/i18nprovider-feature/src/modules/languageprovider/tests/languageprovider-test.js

共有1个答案

云何平
2023-03-14

在测试中调用jest.mock不起作用。

您需要将模拟移到测试之外,并确保工厂函数没有任何外部依赖项。

类似于这样:

import { View } from 'react-native';
import React from 'react';
import { shallow } from 'enzyme';
import connect from '../connect.js';
import LanguageProvider from '../LanguageProvider';
import LanguageStore from '../LanguageStore';

jest.mock('../LanguageStore', () => {
  const language = "en"
  const stringsMock = {
    setLanguage: jest.fn()
  };
  const mockSetLanguage = jest.fn();

  return () => ({
    language,
    strings: stringsMock,
    setLanguage: mockSetLanguage,
  })
});

it('renders correctly', () => {
  const TestComponent = connect(Test);
  const strings = { test: 'Test' };
  const wrapper = shallow(<LanguageProvider strings={strings} language="en"><Test /></LanguageProvider>);
  expect(wrapper.get(0)).toMatchSnapshot();
});


class Test extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <View />;
  }
}
 类似资料:
  • 我有一个类,我将Symfony\Component\HttpClient\HttpClient的实例作为构造函数参数注入其中。 我正在看https://symfony.com/doc/current/components/http_client.html#testing-http-clients-and-responses的留档页面,建议使用作为创建Mock客户端的一种方式。 当我把模拟的客户端传

  • 为类A编写单元测试时如何模拟外部依赖关系。当我以上述方式模拟依赖关系时,“a”的值没有按预期分配给100。

  • 我想知道下面是否可行以及如何实现。 我正在学习Spring boot的教程,其中提到我们可以有一个父依赖项。 然后定义没有版本号的依赖项。 这将在项目依赖项中添加依赖项版本1.5.6。释放sping-boot-starter和sping-boot-starter-web。 就像那样,我想找到什么是<代码> Spring-上下文 spring-jdbc Spring测试 谢谢!

  • 然而,似乎什么也没发生。没有变化,控制台输出没有提到新版本(这就足够了)。 我的如下所示:

  • 我从2.1.4升级了springboot。发布到2.3.3。该版本更新了几个其他依赖项。POM如下所示: 4.0.0 com。gn gservices 1.0.0-SNAPSHOT jar 当我运行依赖:离线它失败与以下错误: 无法执行目标org.apache.maven.plugins: maven-依赖插件: 3.1.2:去离线(default-cli)在项目gservice:org.ecli

  • Velocity 不依赖 jQuery Velocity.js 可以在不引入 jQuery 的情况下单独使用。如果 你需要大部分动画效果能兼容 IE8,就必须引入 jQuery 1×。 它也可以和 Zepto 一起使用,写法和 jQuery 一样: // 无 jQuery 或 Zepto 时,Velocity()方法挂载在 window 对象上 (window.velocity) // ( 第一