Prueba de varias instancias del mismo componente simulado

Hola, Habr. Ha comenzado la contratación de estudiantes para el curso "Automatización de pruebas en JavaScript" . En este sentido, invitamos a todos a visitar una lección de demostración gratuita sobre el tema: "Lo que un evaluador debe saber sobre JS" .



Y ahora compartimos con ustedes la continuación de una serie de útiles traducciones.






Simulando componentes de React con biblioteca de pruebas (serie de 5 partes) :





  1. ¡Las burlas no muerden! Dominar la burla con la biblioteca de pruebas de React





  2. Formato de simulación básico para componentes de React





  3. Comprobación de los niños pasados ​​a un componente de React simulado





  4. Prueba de varias instancias del mismo componente simulado





  5. No te metas en 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 .

— . .





, .





, ? : !





, , .





, a div



  data-testid



. .





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 . , " , React ". React Testing Library, . , React .






« JavaScript».



« JS ».












All Articles