karma.conf.js 未捕获的参考错误:谷歌未定义
Posted
技术标签:
【中文标题】karma.conf.js 未捕获的参考错误:谷歌未定义【英文标题】:karma.conf.js uncaught referencerror: google no defined 【发布时间】:2014-10-03 05:38:38 【问题描述】:当我尝试运行 karma 测试运行程序时,我从我的一个文件中收到如下错误,说我的库 google 未定义???
Chrome 36.0.1985 (Mac OS X 10.9.4) ERROR
Uncaught ReferenceError: google is not defined
at /Users/giowong/rails_project/doctible_pre_treatment/app/assets/javascripts/angular-google-maps.min.js:7
我的 karma.conf.js 文件
// Karma configuration
module.exports = function(config)
config.set(
// base path, that will be used to resolve files and exclude
basePath: '/Users/giowong/rails_project/doctible_pre_treatment/',
// testing framework to use (jasmine/mocha/qunit/...)
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'app/assets/components/angular/angular.js',
'app/assets/components/angular-mocks/angular-mocks.js',
'app/assets/components/angular-resource/angular-resource.js',
'app/assets/components/angular-payments/lib/angular-payments.js',
'app/assets/components/ng-file-upload/angular-file-upload.js',
'app/assets/components/ngDialog/js/ngDialog.js',
'app/assets/components/angular-route/angular-route.js',
'app/assets/components/angular-loading-bar/src/loading-bar.js',
'app/assets/javascripts/angular/filters/widget-filters.js',
'app/assets/components/angular-animate/angular-animate.js',
'app/assets/javascripts/angular/directives/loader.js',
'app/assets/javascripts/angular/directives/focus.js',
'app/assets/javascripts/angular/directives/checkout-form.js',
'app/assets/javascripts/angular/directives/provider-form.js',
'app/assets/components/angular-ui-utils/ui-utils.js',
'app/assets/components/angular-sanitize/angular-sanitize.js',
'app/assets/components/angular-bootstrap/ui-bootstrap.js',
'app/assets/components/angular-ui-map/ui-map.js',
'app/assets/components/underscore/underscore.js',
'app/assets/components/jquery-1.11.1.min.js',
'app/assets/javascripts/*.js',
'app/assets/javascripts/**/**/*.js',
'spec/javascripts/*.js'
],
// list of files / patterns to exclude
exclude:[],
// web server port
port: 8080,
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers: ['Chrome'],
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: true
);
;
我已经尝试过谷歌,但到目前为止没有运气。我试过制作一个测试文件并定义谷歌本身。任何帮助表示赞赏
【问题讨论】:
【参考方案1】:您收到此错误是因为您在应用程序上使用了 google maps v3 API,但没有任何代码在您运行测试时会初始化 window.google 属性。
解决方案 1
将 this mock 编译为 javascript 并在您的配置文件中引用已编译的 *.js。
解决方案 2
-
创建您自己的 google-mock.js
将其添加到 karma.config 的 files 数组中
为您在应用中使用的每个 Google Maps API 调用添加 stab 到 google-mock.js 如下例所示:
(function()
window.google = window.google ||
maps:
Map: function(),
// and so on...
;
)();
解决方案 3
-
打开this链接
将此页面中的 ALL 文本保存到文件 google-maps-api.js
将此文件的路径添加到 karma.config 中的 files 数组中
【讨论】:
我可以看到链接是地图代码。为什么有人要贴一半?换句话说,响亮的“ALL”是怎么回事?为什么这不能通过将链接引用放在文件中来工作?如果您需要使用谷歌地图许可证怎么办?那是地图代码的唯一版本吗?这种不屑一顾的“只是为了这个”解决方案有很多问题,没有任何解释。【参考方案2】:在我的 karma.conf.js 文件部分中,我需要带有“js”扩展名(不是 .ts!)的 google api:
files:[
'src/app/shared/mocks/google-api.js'
],
我已经从 url 复制并粘贴了真正的 google API: "https://maps.googleapis.com/maps/api/js?sensor=false"
如果您传递 url,它将无法正常工作。 这不是一个很酷的解决方案,但至少现在它可以工作。
【讨论】:
以上是关于karma.conf.js 未捕获的参考错误:谷歌未定义的主要内容,如果未能解决你的问题,请参考以下文章
将 index.html 中的引用自动复制到 karma.conf.js
即使未达到测试覆盖率阈值,Karma-coverage 退出代码也始终为 0