代码之家  ›  专栏  ›  技术社区  ›  Michel

Testbed:为什么注入默认类而不是我的spy

  •  1
  • Michel  · 技术社区  · 6 年前

    我有这个测试的设置代码

    beforeEach(() => {
            loggerServiceSpy = jasmine.createSpyObj('LoggerService', ['log', 'naam']);
            TestBed.configureTestingModule({
                declarations: [UserslistComponent, BizPipe],
                providers: [
                    { provide: UserdataService, useClass: MockUserdataService },
                    { provide: LoggerService, useValue: loggerServiceSpy }
                ]
            }).compileComponents();
            fixture = TestBed.createComponent(UserslistComponent); 
            component = fixture.componentInstance;
            fixture.detectChanges();
        });
    

    我要它做的是注入 MockUserdataService (是的)和 loggerServiceSpy .

    UserslistComponent ,注入类型 LoggerService 是真的吗 而不是我的间谍。

    我通过控制台记录LoggerService的名称看到了这一点(我给了LoggerService一个 name 属性)。

    这是 : constructor(private userDataService: UserdataService, private logger: LoggerService) {

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sanju    6 年前

    如果组件中提供了服务,请尝试重写组件:

    beforeEach(() => {
            loggerServiceSpy = jasmine.createSpyObj('LoggerService', ['log', 'naam']);
            TestBed.configureTestingModule({
                declarations: [UserslistComponent, BizPipe],
    
            }).overrideComponent(UserslistComponent, {
                set: {
                    providers: [
                    { provide: UserdataService, useClass: MockUserdataService },
                    { provide: LoggerService, useValue: loggerServiceSpy }
                ],
                }
            }).compileComponents();
            fixture = TestBed.createComponent(UserslistComponent); 
            component = fixture.componentInstance;
            fixture.detectChanges();
        });