【问题标题】:Testbed: Why is the default class injected and not my spy测试台:为什么注入默认类而不是我的间谍
【发布时间】:2018-10-05 10:49:09
【问题描述】:

我有这个设置代码用于我的测试

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 的名称看到了这一点(我给 loggerservice 一个 name 属性)。

这是UserslistComponent 的构造函数: constructor(private userDataService: UserdataService, private logger: LoggerService) {

【问题讨论】:

    标签: angular typescript unit-testing jasmine


    【解决方案1】:

    如果组件中提供了服务,则尝试覆盖组件:

    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();
        });
    

    【讨论】:

    • 哇,这成功了!我不知道如何。大多数时候,当你知道答案时,谷歌搜索很容易。但是当我用谷歌搜索它时,我只得到了 Angular 帮助 (angular.io/api/core/testing/TestBed),它基本上什么也没说,还有一个例子是当你想覆盖模板中的 HTML 时。我在哪里可以找到这样的信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2016-12-11
    相关资源
    最近更新 更多