Я обращаюсь к следующему руководству по извлечению данных на ReactJS.org , потому что я хотел использовать его в качестве шаблона для своего собственного теста.
Я использую npm test
, которыйВызывает test-scripts test и, насколько мне известно, использует jasmine .
Я создал user.js и user.test.js, как описано в руководстве.
// user.test.js
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import User from "./user";
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("renders user data", async () => {
const fakeUser = {
name: "Joni Baez",
age: "32",
address: "123, Charming Avenue"
};
jest.spyOn(global, "fetch").mockImplementation(() =>
Promise.resolve({
json: () => Promise.resolve(fakeUser)
})
);
// Use the asynchronous version of act to apply resolved promises
await act(async () => {
render(<User id="123" />, container);
});
expect(container.querySelector("summary").textContent).toBe(fakeUser.name);
expect(container.querySelector("strong").textContent).toBe(fakeUser.age);
expect(container.textContent).toContain(fakeUser.address);
// remove the mock to ensure tests are completely isolated
global.fetch.mockRestore();
});
Когда я запускаю тест, я получаю Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.
setTimeout.Error
По какой-то причине он, похоже, не решает обещание.
Что я делаю не так?Я не могу поверить, что этот учебник прослушивается !Любая помощь приветствуется!