Как смоделировать объект Маршрутизатор и внедрить в массив провайдеров в конфигурации TestBed - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь создать и внедрить объект фиктивного маршрутизатора в конфигурацию TestBed, но он не работает. Ниже приведена конфигурация:

let mockQuote: QuoteService = new QuoteService(null, null);
let mockOshcStore: OshcStore = new OshcStore(null);
let mockActivatedRoute: ActivatedRoute = new ActivatedRoute();
let mockRouter: Router = new Router(null, null, null, null, null, null, null, null);
//let mockRouter: RouterMock = new RouterMock();
//let router:Router;
TestBed.configureTestingModule({
  providers: [
    {
      provide: QuoteService, useFactory: () => {
        return mockQuote;
      }
    }, FormBuilder, AppStore,
    {
      provide: OshcStore, useFactory: () => {
        return mockOshcStore;
      }
    },
    {
      provide: ActivatedRoute, useFactory: () => {
        return mockActivatedRoute;
      }
    },
    {
      provide: Router, useFactory: () => {
        return mockRouter;
      }
    },
    HttpClient, QuoteCISLAdapter
  ],
  declarations: [CreateQuoteComponent]
});
fixture = TestBed.createComponent(CreateQuoteComponent);
component = fixture.componentInstance;

Выше работает до тех пор, пока «ActivatedRoute», но останавливается, когда он попадает на маршрут и дает:

TypeError: Cannot read property 'get' of null

  at new Router (../packages/router/src/router.ts:406:30)

Я также пробовал массив импорта с RouterTestingModule модуль, но не работал тоже. Есть идеи, чтобы создать безопасный объект с надписью «Маршрутизатор»?

1 Ответ

0 голосов
/ 14 января 2020

У меня обычно есть что-то вроде выше в верхней части моего beforeEach:

mockActivatedRoute = {
            url: 'test',
            params: of({ paramOne: 1,paramTwo: 2018 })
        };

, а затем ниже в моем массиве провайдеров:

{ provide: ActivatedRoute, useValue: mockActivatedRoute },

Для маршрута ... это предполагается, что вы используете навигацию только в своем компоненте, если вы используете больше, вам нужно смоделировать больше вещей:

router = {
            navigate: jasmine.createSpy('navigate')
        };

и затем в массиве провайдеров:

{ provide: Router, useValue: router },
...