Files
bun.sh/test/integration/nest/nest_metadata.test.ts

76 lines
2.2 KiB
TypeScript

import "reflect-metadata";
import { Inject, Injectable } from "@nestjs/common";
import { NestContainer } from "@nestjs/core";
import { PARAMTYPES_METADATA, SELF_DECLARED_DEPS_METADATA } from "@nestjs/common/constants";
import { InstanceWrapper } from "@nestjs/core/injector/instance-wrapper";
import { Module } from "@nestjs/core/injector/module";
import { beforeEach, describe, expect, it } from "bun:test";
describe("Reflect metadata for nestjs", () => {
@Injectable()
class DependencyOne {}
@Injectable()
class DependencyTwo {}
@Injectable()
class MainTest {
@Inject() property: DependencyOne;
constructor(
public one: DependencyOne,
@Inject() public two: DependencyTwo,
) {}
}
let moduleDeps: Module;
let mainTest, depOne, depTwo;
beforeEach(() => {
moduleDeps = new Module(DependencyTwo, new NestContainer());
mainTest = new InstanceWrapper({
name: "MainTest",
token: "MainTest",
metatype: MainTest,
instance: Object.create(MainTest.prototype),
isResolved: false,
});
depOne = new InstanceWrapper({
name: DependencyOne,
token: DependencyOne,
metatype: DependencyOne,
instance: Object.create(DependencyOne.prototype),
isResolved: false,
});
depTwo = new InstanceWrapper({
name: DependencyTwo,
token: DependencyTwo,
metatype: DependencyTwo,
instance: Object.create(DependencyTwo.prototype),
isResolved: false,
});
moduleDeps.providers.set("MainTest", mainTest);
moduleDeps.providers.set(DependencyOne, depOne);
moduleDeps.providers.set(DependencyTwo, depTwo);
moduleDeps.providers.set("MainTestResolved", {
...mainTest,
isResolved: true,
});
});
it("Should be return self:paramtypes from class constructor", () => {
const selfParamtypes = Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, mainTest.metatype);
expect(selfParamtypes).toStrictEqual([{ index: 1, param: DependencyTwo }]);
});
it("Should be return design:paramtypes from class constructor", () => {
const designParamtypes = [...(Reflect.getMetadata(PARAMTYPES_METADATA, mainTest.metatype) || [])];
expect(designParamtypes).toStrictEqual([DependencyOne, DependencyTwo]);
});
});