Angular RouterLink活动选项测试

Angular RouterLink活动选项测试,angular,typescript,Angular,Typescript,我似乎不知道如何为使用[RouterLink ActiveOptions]指令的组件设置*.component.spect.ts文件。我不断地发现这个错误: Can't bind to 'routerLinkActiveOptions' since it isn't a known property of 'button'. 这是等级库文件: import {async, ComponentFixture, TestBed} from '@angular/core/testing'; impo

我似乎不知道如何为使用[RouterLink ActiveOptions]指令的组件设置*.component.spect.ts文件。我不断地发现这个错误:

Can't bind to 'routerLinkActiveOptions' since it isn't a known property of 'button'.
这是等级库文件:

import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {RouterTestingModule} from '@angular/router/testing';

import {TranslatePipeMock} from '@common/services/translate/translate.pipe.mock';

import {NavigationComponent} from './navigation.component';

describe('NavigationComponent', () => {
    let component: NavigationComponent;
    let fixture: ComponentFixture<NavigationComponent>;

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            imports: [
                RouterTestingModule,
            ],
            declarations: [
                NavigationComponent,
                TranslatePipeMock,
            ],
        })
            .compileComponents();
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(NavigationComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    it('should create', () => {
        expect(component).toBeTruthy();
    });
});

如果您想在这个组件中测试指令,您可能需要查看一下

但是假设您只想对组件进行单元测试,您应该在您的测试床设置中设置模式:[NO_ERROR_SCHEMA]——例如,只需在声明下面添加这个

beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [
            RouterTestingModule,
        ],
        declarations: [
            NavigationComponent,
            TranslatePipeMock,
        ],
        schemas: [NO_ERRORS_SCHEMA]
    })
        .compileComponents();
}));
如果只想测试被测组件的行为,此模式允许编译器忽略缺少的指令或子组件

发生此错误的原因是,默认情况下,单元测试会尝试解析所使用的所有内容。由于指令是在模板中设置的,但在您的测试台declerstuons中找不到,编译器会抱怨


实际上,官方文件涵盖的内容相当周到

我认为这并不是一个很好的方法。我当然可以模仿这个指令,但我认为angular对此有一些特定的东西,比如RouterTestingModule。这取决于你想做什么。如果你想测试指令,你只需要模仿它。但是由于它是一个角度指令,您不需要测试它的功能,因为它已经被测试过了。因此,您只需将模式设置为浅层测试您自己的组件。如果您使用shema方法,您不必嘲笑指令。感谢您的反馈!模式:[NO\u ERRORS\u SCHEMA]通常不是一个很好的方法吗?它会抑制其他错误吗?当然,您需要小心,因为它会抑制任何编译错误。没错。但是,如果您只想测试一个组件中的逻辑,而不考虑其依赖性,那么这是一种方法。请看一下他们解释得很好的角度测试文档。