测试ngrx商店:没有MockStore提供商

时间:2020-04-08 14:46:53

标签: ngrx ngrx-store

我正在遵循测试ngrx商店的官方文档:https://ngrx.io/guide/store/testing

即使注入MockStore的最简单实现也具有以下错误:

NullInjectorError: R3InjectorError(CompilerModule)[MockStore -> MockStore]: 
      NullInjectorError: No provider for MockStore!
    error properties: Object({ ngTempTokenPath: null, ngTokenPath: [ 'MockStore', 'MockStore' ] })

我的代码如下:

import { TestBed } from '@angular/core/testing';
import { provideMockStore, MockStore } from '@ngrx/store/testing';

describe('Auth Guard', () => {
  // @ts-ignore
  let store: MockStore;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [
        // any modules needed
      ],
      providers: [
        provideMockStore(),
        // other providers
      ],
    });

    store = TestBed.inject(MockStore);
  });

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

我正在运行@ ngrx / store @ 8.6.0

1 个答案:

答案 0 :(得分:3)

已更新

基于讨论store = TestBed.inject(Store);而不是MockStore就足以实现所需的行为。

原始

为时过早,

在测试中获取它:

  it('should create', inject([Store], (store) => {
    expect(store).toBeTruthy();
  }));

不确定,但是您可以尝试调用compileComponents。

  beforeEach(async () => {
    await TestBed.configureTestingModule({
      imports: [
        // any modules needed
      ],
      providers: [
        provideMockStore(),
        // other providers
      ],
    }).compileComponents();

    store = TestBed.inject(MockStore);
  });