Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 渲染和材质UI:您提供的函数在上下文中没有主题_Reactjs_Jestjs_Material Ui_Enzyme - Fatal编程技术网

Reactjs 渲染和材质UI:您提供的函数在上下文中没有主题

Reactjs 渲染和材质UI:您提供的函数在上下文中没有主题,reactjs,jestjs,material-ui,enzyme,Reactjs,Jestjs,Material Ui,Enzyme,我对测试非常陌生,我正在尝试在现有的react项目中实现它们。 我有一个按钮组件,它需要一个主题上下文。 我理解,要在测试文件中提供此主题,您需要将组件放置在主题提供程序中。 然而,即使我已经这样做了,并且尝试了将主题作为我发现的上下文传递的所有可能的变化,我仍然得到了错误: “材质UI:提供的样式参数无效。 您提供的函数在上下文中没有主题。 其中一个父元素需要使用ThemeProvider。“ My button.test.js: import React from 'react'; impo

我对测试非常陌生,我正在尝试在现有的react项目中实现它们。 我有一个按钮组件,它需要一个主题上下文。 我理解,要在测试文件中提供此主题,您需要将组件放置在主题提供程序中。 然而,即使我已经这样做了,并且尝试了将主题作为我发现的上下文传递的所有可能的变化,我仍然得到了错误:

“材质UI:提供的
样式
参数无效。
您提供的函数在上下文中没有主题。
其中一个父元素需要使用ThemeProvider。“

My button.test.js:

import React from 'react';
import { ThemeProvider, createMuiTheme, responsiveFontSizes } from "@material-ui/core/styles"
import red from "@material-ui/core/colors/red"
import grey from "@material-ui/core/colors/grey"
import Button from "../../components/basics/button"
import Enzyme, { shallow } from "enzyme"
import EnzymeAdapter from "enzyme-adapter-react-16"

Enzyme.configure({adapter: new EnzymeAdapter()});

let theme = createMuiTheme({
  palette: {
    primary: {
      main: red[600],
      contrastText: '#fff',
    },
    secondary: {
      main: grey[500],
      light: grey[300]
    },
  },
  typography:{
    button: {
      fontWeight: "500",
      textTransform: 'none',
    }
  }
})
theme = responsiveFontSizes(theme);

test("Returns a valid button", () => {

  const wrapper = shallow(
    <ThemeProvider theme={theme}>
      <Button type="normalWithIcon" variant="outlined" icon="GetApp" buttonText="Download" color="primary"/>
    </ThemeProvider>
  )

  const b = wrapper.find(Button).dive().find("[data-test='component-button']")

  console.log(b)

  expect(b.length).toBe(1)

})

我正在运行React、Jest和Enzyme的最新版本。

简言之,只要需要
深入到浅层渲染组件中,请使用
mount
而不是
shall

根据该报告,它将:

浅层渲染当前包装的一个非DOM子级,并围绕结果返回一个包装。它必须是单个节点包装器,并且节点必须是React组件


因此,
dive
返回一个新的浅包装,该包装围绕
按钮的子级,不再包含
提供程序或
按钮本身。因此,如果您要测试
按钮内呈现的内容,请使用
mount

我有点困惑,您链接的页面使用了shall作为示例。当我将浅装换成挂载时,我得到了“wrapper.find(…).dive不是一个函数”。
mount
没有
dive
。相反,在您需要的组件上使用
find
。是!我可以发誓我以前试过,但是一个简单的.find()可以与基本主题提供程序一起使用。非常感谢。
TypeError: Cannot read property 'secondary' of undefined

      24 |   const useStyles = makeStyles((theme) => ({
      25 |     root: {
    > 26 |       color: theme.palette.secondary.main,
         |                            ^
      27 | 
      28 |       '&$disabled': {
      29 |         color: theme.palette.secondary.light