test: Add additional tests for Inject decorator
This commit is contained in:
@@ -118,6 +118,130 @@ export function test_InjectDecorator(
|
|||||||
}
|
}
|
||||||
expect(_error).toBeInstanceOf(DependencyResolutionError);
|
expect(_error).toBeInstanceOf(DependencyResolutionError);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should replace the property with the resolved dependency', () => {
|
||||||
|
container.register('MockDependencyIdentifier', {
|
||||||
|
value: 'test-value',
|
||||||
|
});
|
||||||
|
|
||||||
|
class TestClass {
|
||||||
|
@Inject('MockDependencyIdentifier')
|
||||||
|
private readonly _dependency!: any;
|
||||||
|
|
||||||
|
public getDependency() {
|
||||||
|
return this._dependency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public isDependencyTypeofFunction() {
|
||||||
|
return typeof this._dependency === 'function';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const instance = new TestClass();
|
||||||
|
|
||||||
|
expect(instance.getDependency().value).toBe('test-value');
|
||||||
|
|
||||||
|
expect(instance.isDependencyTypeofFunction()).toBe(false);
|
||||||
|
expect(instance.getDependency().value).toBe('test-value');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should use a empty initializer when none is provided but true', () => {
|
||||||
|
container.register(
|
||||||
|
'MockDependencyIdentifier',
|
||||||
|
class X {
|
||||||
|
public value: string = 'test-value';
|
||||||
|
constructor() {}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
class TestClass {
|
||||||
|
@Inject('MockDependencyIdentifier', true)
|
||||||
|
private readonly _dependency!: any;
|
||||||
|
|
||||||
|
public getDependency() {
|
||||||
|
return this._dependency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const instance = new TestClass();
|
||||||
|
expect(instance.getDependency().value).toBe('test-value');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error when the dependency has no instantiation method', () => {
|
||||||
|
container.register('MockDependencyIdentifier', {
|
||||||
|
value: 'test-value',
|
||||||
|
});
|
||||||
|
|
||||||
|
class TestClass {
|
||||||
|
@Inject('MockDependencyIdentifier', true)
|
||||||
|
private readonly _dependency!: any;
|
||||||
|
|
||||||
|
public getDependency() {
|
||||||
|
return this._dependency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
const instance = new TestClass();
|
||||||
|
instance.getDependency();
|
||||||
|
}).toThrow(new RegExp('No instantiation method found for.*'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not throw an error when the dependency has no instantiation method if not necessary', () => {
|
||||||
|
container.register('MockDependencyIdentifier', {
|
||||||
|
value: 'test-value',
|
||||||
|
});
|
||||||
|
|
||||||
|
class TestClass {
|
||||||
|
@Inject('MockDependencyIdentifier', true, false)
|
||||||
|
private readonly _dependency!: any;
|
||||||
|
|
||||||
|
public getDependency() {
|
||||||
|
return this._dependency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
const instance = new TestClass();
|
||||||
|
instance.getDependency();
|
||||||
|
}).not.toThrow(new RegExp('No instantiation method found for.*'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error when the dependency cannot be resolved', () => {
|
||||||
|
container.register('MockDependencyIdentifier', null);
|
||||||
|
|
||||||
|
class TestClass {
|
||||||
|
@Inject('MockDependencyIdentifier', true)
|
||||||
|
private readonly _dependency!: any;
|
||||||
|
|
||||||
|
public getDependency() {
|
||||||
|
return this._dependency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
const instance = new TestClass();
|
||||||
|
instance.getDependency();
|
||||||
|
}).toThrow(new RegExp('.*could not be resolved.*'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not throw an error when the dependency cannot be resolved if not necessary', () => {
|
||||||
|
container.register('MockDependencyIdentifier', null);
|
||||||
|
|
||||||
|
class TestClass {
|
||||||
|
@Inject('MockDependencyIdentifier', true, false)
|
||||||
|
private readonly _dependency!: any;
|
||||||
|
|
||||||
|
public getDependency() {
|
||||||
|
return this._dependency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(() => {
|
||||||
|
const instance = new TestClass();
|
||||||
|
instance.getDependency();
|
||||||
|
}).not.toThrow(new RegExp('.*could not be resolved.*'));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user