首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在响应快照测试时,从Formik组件发出CSS模块问题

在响应快照测试时,从Formik组件发出CSS模块问题
EN

Stack Overflow用户
提问于 2022-12-01 23:22:53
回答 1查看 16关注 0票数 0

我希望尝试快照测试一个更大的组件,但是我的组件因为里面的formik组件而失败(通过删除它进行测试)。

代码语言:javascript
复制
import {
  RadiusInputField,
  createValidators,
  requiredValidator,
  VALIDATE_REQUIRED_TYPES
} from '../../../core/components/formik'

此formik组件用于样式组件:

代码语言:javascript
复制
const TextBoxContainer = styled(RadiusInputField)`

我得到了以下错误:

代码语言:javascript
复制
/Users/ravelyn/dev/kobiton/portal/node_modules/flexboxgrid/dist/flexboxgrid.css:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){.container-fluid,
                                                                                             ^
    
    SyntaxError: Unexpected token '.'

我已经测试过,我可以在另一个测试中单独导入css模块,没有任何问题。

我的jest配置配置如下:

代码语言:javascript
复制
const config = {
  "automock": false,
  "rootDir": "src",
  "modulePaths": ["<rootDir>"],
  "moduleFileExtensions": ['js', 'jsx'],
  "moduleDirectories": ["node_modules"],
  "moduleNameMapper": {
    "^src(.*)$": "<rootDir>",
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/__mocks__/fileMock.js',
    '.+.(css|less)$': 'identity-obj-proxy'
  },
  "transform": {
    '\\.[jt]sx?$': 'babel-jest'
  }
};

module.exports = config;

我的测试是这样的:

代码语言:javascript
复制
import React from "react";
import renderer from 'react-test-renderer';
import theme from '../../../../main/theme';
import Component from "../component-under-test";
import {ThemeProvider} from 'styled-components'

it("should render a gesture dialog text box", () => {
  const tree = renderer
    .create(
      <ThemeProvider theme={theme}>
        <Component />
      </ThemeProvider>
    )
    .toJSON();
  expect(tree).toMatchSnapshot();

});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-12-01 23:45:57

这个问题很可能是由于在Jest测试中导入CSS模块造成的,Jest不支持这个测试。Jest不支持直接导入CSS模块,在代码中遇到.css或.less导入时会引发错误。

要解决这个问题,您需要使用jest.mock函数来模拟CSS模块。这将允许Jest用模拟实现替换CSS模块,这将防止错误发生。

下面是一个如何做到这一点的例子:

  1. 在测试文件中,使用jest.mock函数模拟CSS模块:

代码语言:javascript
复制
jest.mock('../../../core/components/formik', () => ({
  RadiusInputField: () => <div />,
  createValidators: () => {},
  requiredValidator: () => {},
  VALIDATE_REQUIRED_TYPES: {},
}));

  1. 在测试文件中导入模拟的CSS模块:

代码语言:javascript
复制
import '../../../core/components/formik';

在进行这些更改之后,测试应该能够导入CSS模块,而不会引发错误,并且测试应该通过。如果你还有什么问题,请告诉我!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74649227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档