【问题标题】:How to mock a Router object and inject into providers array in TestBed configuration如何在 TestBed 配置中模拟路由器对象并注入提供者数组
【发布时间】:2020-01-14 15:45:44
【问题描述】:

我正在尝试创建一个模拟路由器对象并将其注入到 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”模块的导入数组,但也没有用。有什么想法可以创建一个安全的模拟路由器对象吗?

【问题讨论】:

标签: angular unit-testing testing router testbed


【解决方案1】:

我的 beforeEach 顶部通常有类似上面的内容:

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

然后是我的 providers 数组中的以下内容:

{ provide: ActivatedRoute, useValue: mockActivatedRoute },

对于路由...这假设您仅在组件中使用导航,如果您使用更多,则需要模拟更多内容:

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

然后在 providers 数组中:

{ provide: Router, useValue: router },

【讨论】:

  • 这是激活的路由,如何给路由一样的方式?
  • @ShamithaSilva 添加了更多详细信息
  • 感谢您的回复,如果这有效,我会通知您。 JEST 遇到了其他问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2019-10-24
  • 2021-02-23
  • 1970-01-01
相关资源
最近更新 更多