Oi, Habr. Já começou o recrutamento de alunos para o curso "Automação de Teste em JavaScript" . Nesse sentido, convidamos a todos a visitar uma aula de demonstração gratuita sobre o tópico: "O que um testador precisa saber sobre JS . "
E agora estamos compartilhando com você a continuação de uma série de traduções úteis.
Mocking React Components com Testing Library (série de 5 partes) :
Zombarias não mordem! Dominando a simulação com a biblioteca de testes React
Formato de simulação básico para componentes React
Verificando os filhos passados para um componente React simulado
Testar várias instâncias do mesmo componente simulado
Fique longe de problemas
React . . . : .
.
dirv / -react-
React .
TopFivePostsPage
, , , .
import { PostContent } from "./PostContent"
export const TopFivePostsPage = () => (
<ol>
<PostContent id="top1" />
<PostContent id="top2" />
<PostContent id="top3" />
<PostContent id="top4" />
<PostContent id="top5" />
</ol>
);
queryAllByTestId
toHaveLength
.
describe("BlogPage", () => {
it("renders five PostContent components", () => {
render(<TopFivePostsPage />)
expect(screen.queryAllByTestId("PostContent"))
.toHaveLength(5)
})
})
, , .
it("constructs a PostContent for each top 5 entry", () => {
render(<TopFivePostsPage />)
expect(PostContent).toHaveBeenCalledWith(
{ id: "top1" }, expect.anything())
expect(PostContent).toHaveBeenCalledWith(
{ id: "top2" }, expect.anything())
expect(PostContent).toHaveBeenCalledWith(
{ id: "top3" }, expect.anything())
expect(PostContent).toHaveBeenCalledWith(
{ id: "top4" }, expect.anything())
expect(PostContent).toHaveBeenCalledWith(
{ id: "top5" }, expect.anything())
})
- . . ToHaveBeenCalledWith
.
.mock.calls
.
it("renders PostContent items in the right order", () => {
render(<TopFivePostsPage />)
const postContentIds = PostContent.mock.calls.map(
args => args[0].id)
expect(postContentIds).toEqual([
"top1", "top2", "top3", "top4", "top5"
])
})
TopFivePostsPage
, , PostContent
! - , .
, clearMocks
Jest. package.json
.
"jest": {
"transform": {
"^.+\\.jsx?$": "babel-jest"
},
"setupFilesAfterEnv": ["./jest.setup.js"],
"clearMocks": true
}
, , , .
:
, . , , . , .
jest.mock("../src/PostContent", () => ({
PostContent: jest.fn(({ children, id }) => (
<div data-testid={`PostContent-${id}`}>
{children}
</div>
))
}))
. , , . , .
, , , — , . , , . .
?
queryAllByTestId
.
.mock.calls
.
Jest's
clearMocks
, , .
, ,
data-testid
.
, !
. , , .
React . , , .
.
dirv / -react-
, React .
— . .
, .
, ? : !
, , .
jest.mock("../src/PostContent", () => ({
PostContent: jest.fn(() => (
<div data-testid="PostContent" />
))
}))
jest.mock("../src/PostContent", () => ({
PostContent: jest.fn(({ children }) => (
<div data-testid="PostContent">{children}</div>
))
}))
, , data-testids
. . .
jest.mock("../src/PostContent", () => ({
PostContent: jest.fn(({ children, id }) => <div data-testid={`PostContent-${id}`}>{children}</div>)
}))
, : . -, , , , , Jest mockImplementation
.
? , , , .
. , .
, , : , . , .
, ?
, , : ?
, , .
, React, , . , , .
.
? : , 100 . 10 !
, , ? : .
, «» , . «» — .
?
React . , " , React ". React Testing Library, . , React .