angular - 测试 - 无法解析 (ClassName) 的所有参数

标签 angular karma-jasmine angular2-services angular2-testing angular2-injection

上下文

我创建了一个 ApiService 类来处理我们的自定义 API 查询,同时使用我们自己的序列化程序和其他功能。

ApiService 的构造函数签名是:

constructor(metaManager: MetaManager, connector: ApiConnectorService, eventDispatcher: EventDispatcher);
  • MetaManager 是一种处理 api 元数据的可注入(inject)服务。
  • ApiConnectorService 是一种包装 Http 以添加我们的自定义 header 和签名系统的服务。
  • EventDispatcher 基本上是 Symfony 的事件调度系统,在 typescript 中。

问题

当我测试 ApiService 时,我在 beforeEach 中进行初始化:

beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports  : [
            HttpModule
        ],
        providers: [
            ApiConnectorService,
            ApiService,
            MetaManager,
            EventDispatcher,
            OFF_LOGGER_PROVIDERS
        ]
    });
}));

而且效果很好。

然后我添加了我的第二个规范文件,它是用于 ApiConnectorService 的,带有这个 beforeEach:

beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports  : [HttpModule],
        providers: [
            ApiConnectorService,
            OFF_LOGGER_PROVIDERS,
            AuthenticationManager,
            EventDispatcher
        ]
    });
}));

所有测试都失败并出现此错误:

Error: Can't resolve all parameters for ApiService: (MetaManager, ?, EventDispatcher).

  • 如果我从加载的测试中删除 api-connector-service.spec.ts(ApiConnectorService 的规范文件),ApiService' s 测试将成功。
  • 如果我从加载的测试中删除 api-service.spec.ts(ApiService 的规范文件),ApiConnectorService 的测试会成功的。

为什么会出现这个错误?我的两个文件之间的上下文似乎有冲突,我不知道为什么以及如何解决这个问题。

最佳答案

使用 Jest?

万一有人来到这里并且你正在使用 Jest 来测试你的 Angular 应用程序(希望我们是越来越少的人),如果你没有发出装饰器(“emitDecoratorMetadata”:true )。您需要更新 tsconfig.spec.json 文件,使其看起来像:

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "outDir": "../../out-tsc/spec",
    "types": [
      "jest",
      "node"
    ]
  },
  "files": [
  ],
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ]
}

关于angular - 测试 - 无法解析 (ClassName) 的所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472364/

相关文章:

angular - Ng5 Karma Jasmine 测试呈现组件而不是结果页面

angular - 无法将值数组推送到 Json Typescript Angular

angular - Jasmine 测试订阅服务级别可从 OnInit Angular 观察到

angularjs - 如何使用 Jasmine 测试指令中的 'ng-click' 事件

angular - InMemoryWebApiModule - 状态 : 404 - collection not found

javascript - 如何从 Datepicker 中的代码更改时间?

angular - 根据 .Net Core 构建选择正确的 Angular 环境

javascript - 如何在延迟加载期间显示加载组件

angularjs - 测试模态对话框时的未知提供者

angular - 如何在 Angular2 中处理多个查询参数