【问题标题】:Unable to override MockStore无法覆盖 MockStore
【发布时间】:2020-03-14 20:59:24
【问题描述】:

我使用 provideMockStore 对多个选择器进行单元测试。我需要为其中一个测试用例覆盖 MockStore。代码如下。它不会覆盖商店。我看过那里的文档,提到mockStore = TestBed.inject(MockStore)。它会引发错误,显示“'TestBedStatic' 类型上不存在属性'inject' "@angular/cli": "~8.2.1", "@ngrx/core": "^1.2.0", "@ngrx/效果": "^8.2.0", "@ngrx/entity": "^8.2.0", "@ngrx/router-store": "^8.2.0", "@ngrx/schematics": "^8.2.0", "@ngrx/store": "^8.2.0",

beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [
                RegisteredOwnerContainerComponent,
                RegisteredOwnerComponent,
                AddVehicleTitleComponent,
                SidePanelContentComponent,
                ExplanationComponent
            ],
            imports: [
                FlexLayoutModule,
                FormsModule,
                ReactiveFormsModule,
                MaterialModule,
                HttpClientTestingModule,
                BrowserAnimationsModule,
                LoggerModule.forRoot({ level: NgxLoggerLevel.INFO, disableConsoleLogging: false })
            ],
            providers: [
                { provide: ActivatedRoute, useValue: mockActivateRoute },
                { provide: Router, useValue: mockRouter },
                {
                    provide: EndorsementStateService,
                    useValue: {
                        navigateToNextStep: jasmine.createSpy('navigateToNextStep')
                    }
                },
                provideMockStore({
                    selectors: [
                        { selector: currentPolicySelector, value: currentPolicy },
                        { selector: currentVehicleSelector, value: currentVehicle }
                    ],
                }),
                CookieService
            ],
        }).compileComponents();
    }));

    beforeEach(async(() => {
        fixture = TestBed.createComponent(RegisteredOwnerContainerComponent);
        component = fixture.componentInstance;
        mockedStore = TestBed.get(Store);
        mockService = TestBed.get(EndorsementStateService);

        // mockedStore.select = jasmine.createSpy('select');
    }));

it('should return empty driver array if no PNI and SNI exist', fakeAsync(() => {
        mockedStore.overrideSelector(currentPolicySelector, currentPolicyWithoutPNIAndWithoutSNI);
        fixture.detectChanges();
    }));

【问题讨论】:

    标签: angular ngrx


    【解决方案1】:

    TestBed.inject 是一个角 9 函数。

    对于角度 8,请使用 TestBed.get

    【讨论】:

    • 感谢您的回复。我试过 mockedStore = TestBed.get(MockStore);但出现错误:NullInjectorError: No provider for MockStore!
    • 您无法在 v8 中从 TestBed 获取 MockStore(这是一个错误)。您必须获取 Store 并将其投射到 MockStore。 TestBed.get(Store) 作为 Mockstore
    • @timdeschryver 是否在任何地方跟踪过该问题?
    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多