4
我正在测试一个简单的服务。该服务使用来自其他服务的2个值。Angular2测试:更改服务的注入值
基本上,我想测试的那些2个值:isLogged =假和isLogged =真。
是否可以更改注入服务的值,还是需要执行其他操作? (我不知道,所以如果你能在路上引导我,我会很感激)。
这里是我的测试代码:
编辑我已经找到了解决我的问题。您需要将提供程序注入注入参数,并且您可以根据需要更改其属性。
import { TestBed, async, inject } from '@angular/core/testing';
import { AuthGuardService } from './authguard.service';
import { Router } from '@angular/router';
import { AuthService } from './auth.service';
describe('AuthguardService',() => {
let calledUrl = '/logged/main/last';
let authServiceStub = {
isLogged: false,
redirectUrl: calledUrl
};
class RouterStub {
navigate(url: string) { return url; }
};
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
AuthGuardService,
{ provide: AuthService, useValue: authServiceStub },
{ provide: Router, useClass: RouterStub },
]
});
});
it('should ...', inject([AuthGuardService, Router], (service: AuthGuardService, router: Router) => {
let spy = spyOn(router, 'navigate');
service.checkLoginState(calledUrl);
expect(spy).toHaveBeenCalledWith(['/login']);
}));
});
是的,这是可能的。这也可能取决于AuthService是什么以及如何使用它。 – estus
AuthService表示如果'isLogged'为false,则重定向到''login'',如果是true,则返回给函数** checkLoginState的参数** – trichetriche