Angular单元测试(Jasmine Karma)报错:找不到名称'google'
解决单元测试中"Cannot find name 'google'"的问题
方法1:配置测试环境的TypeScript配置文件
你在tsconfig.app.json中添加googlemaps无效,因为单元测试使用的是**tsconfig.spec.json**配置文件。打开该文件,在compilerOptions.types数组中加入"googlemaps":
{ "compilerOptions": { "types": [ "jasmine", "googlemaps" // 添加这一行 ] } }
方法2:声明全局google变量
如果不想修改配置文件,可直接在测试文件顶部或项目的typings.d.ts文件中添加全局变量声明:
declare var google: any;
若需要类型提示支持,先安装对应类型依赖:
npm install @types/googlemaps --save-dev
再在测试文件中引入类型:
import { } from '@types/googlemaps';
方法3:Mock Google Maps对象(单元测试推荐方案)
单元测试无需依赖真实的Google Maps服务,直接模拟google对象既能解决报错,又能专注测试自身代码逻辑。在测试的beforeEach钩子中添加模拟代码:
beforeEach(() => { // 模拟google.maps的核心结构 (window as any).google = { maps: { places: { Autocomplete: jasmine.createSpy('Autocomplete').and.returnValue({ // 可根据测试需求模拟Autocomplete的方法或属性 }) }, event: { addListener: jasmine.createSpy('addListener') } } }; // 其他测试初始化操作 });
内容的提问来源于stack exchange,提问作者Priyas Paulzagade
相关产品推荐
相关产品推荐

