Tôi đã viết một nút tùy chỉnh ( MyStyledButton
) dựa trên tài liệu-ui Button
.
import React from "react";
import { Button } from "@material-ui/core";
import { makeStyles } from "@material-ui/styles";
const useStyles = makeStyles({
root: {
minWidth: 100
}
});
function MyStyledButton(props) {
const buttonStyle = useStyles(props);
const { children, width, ...others } = props;
return (
<Button classes={{ root: buttonStyle.root }} {...others}>
{children}
</Button>
);
}
export default MyStyledButton;
Nó được tạo kiểu bằng cách sử dụng một chủ đề và điều này xác định backgroundColor
là màu vàng (Đặc biệt #fbb900
)
import { createMuiTheme } from "@material-ui/core/styles";
export const myYellow = "#FBB900";
export const theme = createMuiTheme({
overrides: {
MuiButton: {
containedPrimary: {
color: "black",
backgroundColor: myYellow
}
}
}
});
Các thành phần được khởi tạo trong chính của tôi index.js
và được bọc trong theme
.
<MuiThemeProvider theme={theme}>
<MyStyledButton variant="contained" color="primary">
Primary Click Me
</MyStyledButton>
</MuiThemeProvider>
Nếu tôi kiểm tra nút trong Chrome DevTools, background-color
nó sẽ được "tính toán" như mong đợi. Đây cũng là trường hợp trong Firefox DevTools.
Tuy nhiên, khi tôi viết một bài kiểm tra JEST để kiểm tra background-color
và tôi truy vấn kiểu nút DOM òf nút sử dụng getComputedStyles()
tôi transparent
quay lại và bài kiểm tra thất bại.
const wrapper = mount(
<MyStyledButton variant="contained" color="primary">
Primary
</MyStyledButton>
);
const foundButton = wrapper.find("button");
expect(foundButton).toHaveLength(1);
//I want to check the background colour of the button here
//I've tried getComputedStyle() but it returns 'transparent' instead of #FBB900
expect(
window
.getComputedStyle(foundButton.getDOMNode())
.getPropertyValue("background-color")
).toEqual(myYellow);
Tôi đã bao gồm một CodeSandbox với vấn đề chính xác, mã tối thiểu để sao chép và thử nghiệm JEST không thành công.
theme
cần phải được sử dụng trong thử nghiệm? Như trong, bọc <MyStyledButton>
trong <MuiThemeProvider theme={theme}>
? Hoặc sử dụng một số chức năng bao bọc để thêm chủ đề cho tất cả các thành phần?