Karma-Jasmine:使用noImplicitAny导入间谍

时间:2017-08-29 17:14:57

标签: angular typescript jasmine karma-jasmine

如果我在Angular 4+项目的tsconfig.json文件中设置它:

"noImplicitAny": true,

...并导入它以用于单元测试:

import { Spy } from "karma-jasmine";

...我在npm test上看到此控制台错误:

ERROR in C:/test-project/src/app/components/test/test.component.spec.ts (1,21):
Could not find a declaration file for module 'karma-jasmine'.
'C:/test-project/node_modules/karma-jasmine/lib/index.js' implicitly has an 'any' type.
Try `npm install @types/karma-jasmine` if it exists or add a new declaration (.d.ts) file containing `declare module 'karma-jasmine';`

我试过了:

  1. npm install --save-dev @types/karma-jasmine

  2. "types": [ "karma-jasmine" ]添加到tsconfig.json

  3. ...现在我在npm test看到此控制台错误:

    ERROR in C:/test-project/src/app/components/test/test.component.spec.ts (1,21):
    File 'C:/test-project/node_modules/@types/karma-jasmine/index.d.ts' is not a module.
    

    如果设置Spy,如何导入"noImplicitAny": true

    如果设置为false是默认值),则导入和使用可以正常运行。

    使用示例:

    const testSpy: Spy = spyOn(testService, "test").and.callThrough();
    

1 个答案:

答案 0 :(得分:2)

那是因为框架的名称是Jasmine。 Karma是测试运行器,不应该在规范中提及,karma-jasmine是Karma插件,可以无缝运行Jasmine规范。

由于jasminea namespace,因此应为:

import * as jasmine from "jasmine";

const spy: jasmine.Spy = ...;

jasmine应该是全球性的,jasmine.Spy可以在没有import的情况下直接使用。