Reactjs 渲染和材质UI:您提供的函数在上下文中没有主题
我对测试非常陌生,我正在尝试在现有的react项目中实现它们。 我有一个按钮组件,它需要一个主题上下文。 我理解,要在测试文件中提供此主题,您需要将组件放置在主题提供程序中。 然而,即使我已经这样做了,并且尝试了将主题作为我发现的上下文传递的所有可能的变化,我仍然得到了错误: “材质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
样式
参数无效。您提供的函数在上下文中没有主题。
其中一个父元素需要使用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