Angular 因果报应错误:没有提供';ServiceName';!
我正在为我的AccountLogin服务编写UTC。在其构造函数中,它根据环境获取实例。若环境为true,则获取AccountLoginMockService的实例,否则获取AccountLoginApiService。因为我已经将env设置为true,所以它总是获取AccountLoginMockService的实例Angular 因果报应错误:没有提供';ServiceName';!,angular,karma-jasmine,specifications,Angular,Karma Jasmine,Specifications,我正在为我的AccountLogin服务编写UTC。在其构造函数中,它根据环境获取实例。若环境为true,则获取AccountLoginMockService的实例,否则获取AccountLoginApiService。因为我已经将env设置为true,所以它总是获取AccountLoginMockService的实例 import { Injectable, Injector, EventEmitter } from '@angular/core' import { environment }
import { Injectable, Injector, EventEmitter } from '@angular/core'
import { environment } from '../../../../environments/environment';
import { Observable } from 'rxjs/Observable';
import { AccountLoginMockService } from './accountLogin.service.mock';
import { AccountLoginApiService } from './accountLogin.service.api';
import { AccountLogin } from '../accountLogin';
import { CacheCustomService } from '../../../shared/services/cache/cacheCustom.service';
import { UserDetail } from './accountLogin.model';
import { InstanceService } from '../../../shared/services/instance.service';
export interface IAccountLoginService {
singinUser(userDetails: AccountLogin): Observable<UserDetail>,
logout(): void,
isAuthorized(): boolean,
};
@Injectable()
export class AccountLoginService implements IAccountLoginService {
loginService: IAccountLoginService;
cacheService: CacheCustomService;
loginStatusEmitter: EventEmitter<UserDetail> = new EventEmitter<UserDetail>();
/**
* Constructor
* @param {InstanceService} privateinstanceService
*/
constructor(private instanceService: InstanceService) {
this.loginService = this.instanceService.getInstance((environment.needMock) ?
AccountLoginMockService : AccountLoginApiService);
this.cacheService = this.instanceService.getInstance(CacheCustomService);
};
;
/**
* Calls signin function of concerned service
* @param {} userDetails
* @returns Observable
*/
singinUser(userDetails: AccountLogin): Observable<UserDetail> {
return this.loginService.singinUser(userDetails).map((data) => {
this.storeUserDetail(data);
return data;
});
};
/**
* Calls logout function of concerned service
* @returns void
*/
logout(): void {
this.cacheService.deleteCacheKey('userDetail');
return this.loginService.logout();
};
/**
* calls isAuthorized function of concerned service
* @returns boolean
*/
isAuthorized(): boolean {
return this.loginService.isAuthorized();
};
/**
* Stores user details in cache and emits to login status component
* @param {UserDetail} userDetail
*/
private storeUserDetail(userDetail: UserDetail) {
this.cacheService.storeDataToCache(userDetail, 'userDetail', false)
this.loginStatusEmitter.emit(userDetail);
}
};
import { AccountLoginService } from './accountLogin.service'
import { ReflectiveInjector, EventEmitter } from "@angular/core";
import { InstanceService } from "app/shared/services/instance.service";
import { TestBed } from "@angular/core/testing";
import { AccountLoginApiService, AccountLoginMockService } from "app/pages/accountLogin/accountLoginService";
import { CacheCustomService } from "app/shared/services/cache/cacheCustom.service";
import { AccountLoginModule } from "app/pages/accountLogin/accountLogin.module";
import { Observable } from "rxjs/Observable";
import { HttpModule } from "@angular/http";
describe('Account Login Service', () => {
let accountLoginService : AccountLoginService,
mockCacheService: CacheCustomService ,
mockInstanceService :InstanceService,
mockAccountLoginApiService ={};
beforeEach(async() =>{
let mockAccountLoginService = {
singinUser :(userDetails)=>{
if(userDetails.userName === 'abc@123.com' && userDetails.password === '123456'){
return Observable.of(true);
} else {
return Observable.of(false);
}
}
}
TestBed.configureTestingModule({
providers : [
{ provide: AccountLoginMockService, useValue: mockAccountLoginService },
//{ provide: AccountLoginApiService, useValue: mockAccountLoginApiService },
InstanceService, AccountLoginApiService, AccountLoginMockService , AccountLoginApiService]
});
})
beforeEach(() => {
const injector = ReflectiveInjector.resolveAndCreate([InstanceService])
mockInstanceService = injector.get(InstanceService);
accountLoginService = new AccountLoginService(mockInstanceService);
})
it('should be able to login' ,()=>{
let userDetails = { userName:'intershop@123.com', password: '123456'}
accountLoginService.singinUser(userDetails).subscribe( (data)=>{
console.log(data);
expect(data).toBeDefined;
})
});
});