createRemixStub
このコンテンツはまだ日本語訳がありません。
该实用程序允许您通过设置一组模拟的路由来对依赖于 Remix 钩子 / 组件的组件进行单元测试:
import { createRemixStub } from "@remix-run/testing";
test("renders loader data", async () => { const RemixStub = createRemixStub([ { path: "/", meta() { /* ... */ }, links() { /* ... */ }, Component: MyComponent, ErrorBoundary: MyErrorBoundary, action() { /* ... */ }, loader() { /* ... */ }, }, ]);
render(<RemixStub />);
// Assert initial render await waitFor(() => screen.findByText("..."));
// Click a button and assert a UI change user.click(screen.getByText("button text")); await waitFor(() => screen.findByText("..."));});
如果你的 loader 依赖于 getLoadContext 方法,你可以通过 createRemixStub 的第二个参数提供一个存根上下文:
const RemixStub = createRemixStub( [ { path: "/", Component: MyComponent, loader({ context }) { return json({ message: context.key }); }, }, ], { key: "value" });
如果你需要控制初始 URL、历史堆栈、水合数据或未来标志,则 <RemixStub>
组件本身具有与 React Router 类似的属性:
// Test the app rendered at "/2" with 2 prior history stack entriesrender( <RemixStub initialEntries={["/", "/1", "/2"]} initialIndex={2} />);
// Test the app rendered with initial loader data for the root route. When using// this, it's best to give your routes their own unique IDs in your route definitionsrender( <RemixStub hydrationData={{ loaderData: { root: { message: "hello" } }, }} />);
// Test the app rendered with given future flags enabledrender(<RemixStub future={{ v3_coolFeature: true }} />);