@asuka/di
Version:
Dependencies inject library
166 lines • 4.94 kB
JavaScript
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