如果我在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';`
我试过这个:
npm install --save-dev @types/karma-jasmine
将
"types": [ "karma-jasmine" ]
添加到tsconfig.json
。。。现在我在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.
如果设置了"noImplicitAny": true
,如何导入Spy
?
如果将其设置为false
(,这是默认值(,则导入和使用不会出错。
示例用法:
const testSpy: Spy = spyOn(testService, "test").and.callThrough();
这是因为框架的名称是Jasmine。Karma是不应该在规范中提及的测试运行程序,karma-jasmine
是无缝运行Jasmine规范的Karma插件。
由于jasmine
是一个名称空间,它应该是:
import * as jasmine from "jasmine";
const spy: jasmine.Spy = ...;
假定jasmine
是全局的,并且jasmine.Spy
可以在没有import
的情况下直接使用。