Во-первых, посмотрите, что такое статический метод и что делает ключевое слово static
.
Так как getInitialProps
простостатическая функция на компоненте , вы можете проверить ее вручную, как и любую другую функцию.
import MyComponent from "./path/to/MyComponent";
// Mock the getContent function which I don't know where it comes from.
jest.mock("../someModule.js", () => ({
getContent: () => Promise.reject()
}));
describe("MyComponent", () => {
it('populates the "alert" prop on getContent failure.', async () => {
// Inject anything you want to test
const props = await MyComponent.getInitialProps({
query: { first: "whatever" }
});
// And make sure it results in what you want.
expect(props).toEqual({
content: [],
alert: "There was an error loading data, please try again."
});
});
});
В большинстве случаев getInitialProps
так или иначе вызывается так .
export default class MyApp extends App {
static async getInitialProps ({ Component, router, ctx }) {
let pageProps = {}
if (Component.getInitialProps) {
pageProps = await Component.getInitialProps(ctx)
}
return { pageProps }
}
Документация описывает getInitialProps
goal , и мы можем подтвердить, что можно вызывать его напрямую и проверить его возвращаемое значение как Object
.
Обратите внимание, что для загрузки данных при загрузке страницы мы используем getInitialProps
, который является async
статическим методом. Он может асинхронно извлекать все, что преобразуется в обычный JavaScript-код Object
, который заполняет props
.
Данные, возвращаемые из getInitialProps
, сериализуются при рендеринге сервера, аналогично JSON.stringify
. Убедитесь, что возвращаемый объект из getInitialProps
является простым Object
и не использует Date
, Map
или Set
.
Для начальной загрузки страницы на сервере будет выполняться getInitialProps
только. getInitialProps
будет выполняться на клиенте только при переходе на другой маршрут через компонент Link
или с использованием API маршрутизации.