@esmx/router-vue
Version:
Vue integration for @esmx/router - A universal router that works seamlessly with both Vue 2.7+ and Vue 3
58 lines (57 loc) • 1.74 kB
JavaScript
import { describe, expect, it } from "vitest";
import {
createApp,
getCurrentInstance,
h,
inject,
nextTick,
provide
} from "vue";
describe("app.runWithContext()", () => {
it("should exist on Vue app", () => {
const app = createApp({ render: () => h("div") });
expect(typeof app.runWithContext).toBe("function");
});
it("should enable inject to read provided value within context", () => {
const KEY = Symbol("ctx-key");
const app = createApp({ render: () => h("div") });
app.provide(KEY, 42);
const value = app.runWithContext(() => inject(KEY));
expect(value).toBe(42);
});
it("should not read value provided in root setup via runWithContext", async () => {
const KEY = Symbol("ctx-key-setup");
const app = createApp({
setup() {
provide(KEY, 7);
return () => h("div");
}
});
const container = document.createElement("div");
document.body.appendChild(container);
app.mount(container);
await nextTick();
const value = app.runWithContext(() => inject(KEY));
expect(value).toBeUndefined();
app.unmount();
container.remove();
});
it("should read app-level provide set inside setup via appContext", async () => {
const KEY = Symbol("ctx-key-setup-app");
const app = createApp({
setup() {
const appInst = getCurrentInstance().appContext.app;
appInst.provide(KEY, 9);
return () => h("div");
}
});
const container = document.createElement("div");
document.body.appendChild(container);
app.mount(container);
await nextTick();
const value = app.runWithContext(() => inject(KEY));
expect(value).toBe(9);
app.unmount();
container.remove();
});
});