- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
完整错误如下:
Warning: useLayoutEffect does nothing on the server, because itseffect cannot be encoded into the server renderer's output format.This will lead to a mismatch between the initial, non-hydrated UI andthe intended UI. To avoid this, useLayoutEffect should only be used incomponents that render exclusively on the client
in ForwardRef(ButtonBase)
in WithStyles(ForwardRef(ButtonBase))
in ForwardRef(Button)
in WithStyles(ForwardRef(Button))
in form
in div
每次运行测试时我都会得到它。这是我的测试
/* eslint-disable quotes */
import React from "react"
import { shallow, configure } from "enzyme"
import LoginForm from "../src/components/LoginForm"
import Button from "@material-ui/core/Button"
import Adapter from "enzyme-adapter-react-16"
import { render, fireEvent, cleanup } from "@testing-library/react"
configure({ adapter: new Adapter() })
describe("<LoginForm />", () => {
let wrapper
let usernameInput
let passwordInput
let signInButton
// Create initial props that get passed into the component
const initialProps = {
location: {
state: {
from: {
pathname: "/",
},
},
},
}
// Unit testing
describe("Unit tests", () => {
// what to do before each test
beforeEach(() => {
// Render the login form component, pass in props. (Shallow method renders the component without its children, good for unit tests.)
wrapper = shallow(<LoginForm {...initialProps} />)
usernameInput = wrapper.find("#username")
passwordInput = wrapper.find("#password")
signInButton = wrapper.find(Button)
})
// what to do after each test
afterEach(() => {
jest.clearAllMocks()
})
// UI Integrity test
it("should match the snapshot", () => {
// snapshots are text references of the html of the rendered component.
expect(wrapper.html()).toMatchSnapshot()
})
it("should have a username inputs", () => {
expect(usernameInput.length).toEqual(1)
})
it("should have the expected props on the username field", () => {
expect(usernameInput.props()).toEqual({
id: "username",
name: "username",
value: "",
type: "username",
onChange: expect.any(Function),
required: true,
})
})
it("should have a password field", () => {
expect(passwordInput.length).toEqual(1)
})
it("should have the expected props on the password field", () => {
expect(passwordInput.props()).toEqual({
id: "password",
name: "password",
value: "",
type: "password",
onChange: expect.any(Function),
required: true,
})
})
it("should have a submit button", () => {
expect(signInButton.length).toEqual(1)
})
it("should have the expected props on the button", () => {
expect(signInButton.props()).toEqual({
type: "button",
variant: "contained",
style: expect.objectContaining({
marginTop: "10px",
}),
onClick: expect.any(Function),
children: "Sign In",
})
})
})
// Integrations Testing
describe("Integrations tests", () => {
beforeEach(() => {
// Render the login form component, pass in props. (render method renders the component with its children, good for integrations tests, uses react-test-library.)
const { getByLabelText, getByText } = render(
<LoginForm {...initialProps} />
)
usernameInput = getByLabelText(/Username/i)
passwordInput = getByLabelText(/Password/i)
signInButton = getByText("Sign In")
})
afterEach(cleanup)
it("Username text change in onChange event", () => {
expect(usernameInput.value).toBe("")
fireEvent.change(usernameInput, { target: { value: "James" } })
expect(usernameInput.value).toBe("James")
})
it("Password text change in onChange event", () => {
expect(passwordInput.value).toBe("")
fireEvent.change(passwordInput, { target: { value: "mypassword" } })
expect(passwordInput.value).toBe("mypassword")
})
it("Test button submit", () => {
const mockLogin = jest.fn()
const button = shallow(<Button onClick={mockLogin} />)
button.simulate("click")
expect(mockLogin.mock.calls.length).toEqual(1)
})
})
})
我相信这与material-ui组件有关。我查了一下,here上有类似的问题这表明该问题与我的项目没有的依赖关系有关。所以我认为这与使用 useEffectLayout 的material-ui 组件有关,并且测试环境出于某种原因不喜欢这样。我使用yarn 和 jest yarn test
运行测试来运行测试套件。
最佳答案
添加
import React from "react"
React.useLayoutEffect = React.useEffect
到我的 frontend/src/setupTests.js 测试文件是抑制 Jest 警告的一种方法。最终,这看起来是 Material-UI 组件与 Jest 存在问题的问题。
关于reactjs - 如何修复 "Warning: useLayoutEffect does nothing on the server"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070996/
我有以下组件: // component.js import React from 'react'; import useComponentSize from 'useComponentSize';
据我所知,useLayoutEffect 同步运行,而 useEffect 异步运行 - 或多或少就像我们使用 useLayoutEffect 一样,但是setTimeout(func,0)。 use
我们如何模仿 useLayoutEffect() 的功能?在类组件中? 假设我们的功能组件是 function MyFuncComponent() { useLayoutEffect(() =>
关于 useLayoutEffect 的区别之一对比 useEffect是useLayoutEffect将在 DOM 突变之后和浏览器绘制阶段之前同步触发。 (Reference) 但是,我遇到了一些
我看过这个答案:useMemo vs. useEffect + useState ,它很好地总结了 useEffect ,但就我而言,我想执行一项昂贵的操作来尽早更改 DOM。会useMemo()仍然
完整错误如下: Warning: useLayoutEffect does nothing on the server, because itseffect cannot be encoded int
useMutationEffect 和 useLayoutEffect 在使用方面有什么区别? 我已阅读所有在线可用 Material ,包括(但不限于) Hooks Reference Blog p
我不明白为什么需要以下 useImperativeHandle、useLayoutEffect 和 useDebugValue 钩子(Hook),您能否举例说明何时可以使用它们,但请不要使用文档中的示
我正在使用 React v.16.12.0 和 @MaterialUI/core v4.8.1。 我正在尝试为 React Leaflet Marker 创建自定义图标。图标是 Fab Materia
我想从 React Native 的标题底部删除模糊的边框。我正在使用 useLayoutEffect()钩子(Hook)修改标题但无法删除边框。我试过使用 borderBottomWidth: 0里
在官方 React 文档中,对于 useLayoutEffect ,其中提到: The signature is identical to useEffect, but it fires synchr
我有一个组件,我想在屏幕上呈现 HTML 之前进行一些计算。由于useEffect和 useLayoutEffect可以处理这个任务,我的问题是它们都在代码中,它们中的哪一个将首先被触发,useEff
我是一名优秀的程序员,十分优秀!