@joist/di
Version:
Dependency Injection for Vanilla JS classes
63 lines (45 loc) • 1.46 kB
text/typescript
import { assert } from "chai";
import { INJECTOR_CTX } from "../context/injector.js";
import {
ContextRequestEvent,
type UnknownContext,
} from "../context/protocol.js";
import { Injector } from "../injector.js";
import { DOMInjector } from "./dom-injector.js";
it("should respond to elements looking for an injector", () => {
const injector = new DOMInjector();
injector.attach(document.body);
const host = document.createElement("div");
document.body.append(host);
let parent: Injector | null = null;
host.dispatchEvent(
new ContextRequestEvent(INJECTOR_CTX, (i) => {
parent = i;
}),
);
assert.equal(parent, injector);
injector.detach();
host.remove();
});
it("should send request looking for other injector contexts", () => {
const parent = new Injector();
const injector = new DOMInjector();
const cb = (e: ContextRequestEvent<UnknownContext>) => {
if (e.context === INJECTOR_CTX) {
e.callback(parent);
}
};
document.body.addEventListener("context-request", cb);
injector.attach(document.body);
assert.equal(injector.parent, parent);
injector.detach();
document.body.removeEventListener("context-request", cb);
});
it("should throw an error if attempting to attach an already attached DOMInjector", () => {
const injector = new DOMInjector();
const el = document.createElement("div");
injector.attach(el);
assert.throw(() => {
injector.attach(el);
});
});