UNPKG

@asuka/di

Version:
166 lines 4.94 kB
import { __decorate, __metadata, __param } from "tslib"; import 'reflect-metadata'; import test from 'ava'; import { Inject, Test, Injectable, InjectionToken } from '../index'; import { rootInjector } from '../root-injector'; test('should resolve dep instance', function (t) { var Dep = (function () { function Dep() { } Dep = __decorate([ Injectable() ], Dep); return Dep; }()); var Service = (function () { function Service(dep) { this.dep = dep; } Service = __decorate([ Injectable(), __metadata("design:paramtypes", [Dep]) ], Service); return Service; }()); var testModule = Test.createTestingModule().compile(); var service = testModule.getInstance(Service); t.true(service instanceof Service); t.true(service.dep instanceof Dep); }); test('should override when createTestingModule', function (t) { function whatever() { return true; } function replacement() { return false; } var token = new InjectionToken('replacable'); rootInjector.addProvider({ useValue: replacement, provide: token, }); var Service = (function () { function Service(dep) { this.dep = dep; } Service = __decorate([ Injectable(), __param(0, Inject(token)), __metadata("design:paramtypes", [Object]) ], Service); return Service; }()); var testModule = Test.createTestingModule({ providers: [{ provide: token, useValue: replacement }] }).compile(); var service = testModule.getInstance(Service); t.true(service instanceof Service); t.is(service.dep, replacement); t.false(service.dep()); }); test('should override by overrideProvider method', function (t) { function whatever() { return true; } function replacement() { return false; } var token = new InjectionToken('replacabel'); rootInjector.addProvider({ useValue: replacement, provide: token, }); var Service = (function () { function Service(dep) { this.dep = dep; } Service = __decorate([ Injectable(), __param(0, Inject(token)), __metadata("design:paramtypes", [Object]) ], Service); return Service; }()); var testModule = Test.createTestingModule() .overrideProvider(token) .useValue(replacement) .compile(); var service = testModule.getInstance(Service); t.true(service instanceof Service); t.is(service.dep, replacement); t.false(service.dep()); }); test('should override class', function (t) { var Dep = (function () { function Dep() { } Dep = __decorate([ Injectable() ], Dep); return Dep; }()); var Service = (function () { function Service(dep) { this.dep = dep; } Service = __decorate([ Injectable(), __metadata("design:paramtypes", [Dep]) ], Service); return Service; }()); var BetterDep = (function () { function BetterDep() { } BetterDep = __decorate([ Injectable() ], BetterDep); return BetterDep; }()); var testModule = Test.createTestingModule() .overrideProvider(Dep) .useClass(BetterDep) .compile(); var service = testModule.getInstance(Service); t.true(service instanceof Service); t.true(service.dep instanceof BetterDep); }); test('should ovrride factory', function (t) { var token = new InjectionToken('whatever'); rootInjector.addProvider({ provide: token, useFactory: function () { return '1'; }, }); var Service = (function () { function Service(fun) { this.fun = fun; } Service = __decorate([ Injectable(), __param(0, Inject(token)), __metadata("design:paramtypes", [String]) ], Service); return Service; }()); var testModule = Test.createTestingModule() .overrideProvider(token) .useFactory(function () { return '2'; }) .compile(); var service = testModule.getInstance(Service); t.is(service.fun, '2'); }); test('should override TestModule', function (t) { var BetterTestModule = (function () { function BetterTestModule() { } BetterTestModule.prototype.getInstance = function (target) { return this.injector.getInstance(target); }; return BetterTestModule; }()); var testModule = Test.createTestingModule({ TestModule: BetterTestModule, }).compile(); t.true(testModule instanceof BetterTestModule); }); //# sourceMappingURL=testbed.spec.js.map