为什么我在Jest测试运行中遇到缺少提供程序的错误?

时间:2017-08-26 01:39:53

标签: angular unit-testing jest angular-router

为什么在将RouterEffects添加到应用程序后运行Jest时会出现此错误?

错误输出(部分):没有路由器的提供商!完整输出可在此处获取:gist with error output

这是我开始收到此错误后的最后一次提交:change what break my tests。这是我添加的效果文件:effect file

是的我在那里注入了路由器。但为什么我会收到错误?我在CoreModule中有RouterModule。我测试了DiaryModule中的一个组件。以下是我配置测试模块的方法:

.configureTestingModule({
  imports: [
    DiaryModule,
    StoreModule.forRoot({
      ...fromRoot.reducers,
      diary: combineReducers(fromFeature.reducers),
    }),
  ],
})

为什么我会收到错误?此处必须包含RouterModule:TestingModule - > DiaryModule - > CoreModule - > RouterModule。根据规范(https://angular.io/api/router/Router),Router是RouterModule的一部分。那么为什么我会收到这个错误?即使我导入RouterModule我也有同样的错误:没有路由器的提供商!为什么?我该如何解决这个问题?

我尝试了另一种设置。我尝试了这个模块配置:

.configureTestingModule({
  imports: [
    MdIconModule,
    DiaryComponentsModule,
    StoreModule.forRoot({
      ...fromRoot.reducers,
      diary: combineReducers(fromFeature.reducers),
    }),
  ],
  declarations: [
    MyDairyPageComponent,
    CommonShowIfLoggedInComponent,
    NotLoggedInComponent,
  ],
  providers: [DialogFactoryService],
})

看看第一个配置比第二个更好。第二个是工作,我没有得到与第一个配置相同的错误。为什么?我有模块,我想测试该模块的组件。我想要的只是导入包含组件的模块。

0 个答案:

没有答案