mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
76 lines
2.2 KiB
TypeScript
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]);
|
|
});
|
|
});
|