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.configfiles 数组中

    为您在应用中使用的每个 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

IntelliJ中的Karma配置

谷歌地图未捕获的类型错误:无法读取 null 的属性“offsetWidth”

未捕获的错误:缩小的 React 错误 #200

React - 未捕获的类型错误:无法读取未定义的属性“func”