2015-01-07 3 views
12

Sto provando a scrivere test unitari usando Karma + Jasmine, ma sto correndo in un errore con angock-mocks . Durante l'esecuzione di test di grugnito ottengo il seguente errore:Karma + angular-mocks TypeError: 'undefined' non è un oggetto (valutando 'angular.mock = {}')

PhantomJS 1.9.8 (Mac OS X) ERROR TypeError: 'undefined' is not an object (evaluating 'angular.mock = {}') at /Users/danielbogart/Documents/coding/work/AexNav/bower_components/angular-mocks/angular->mocks.js:17 Chrome 39.0.2171 (Mac OS X 10.9.4) ERROR Uncaught TypeError: Cannot set property 'mock' of undefined at /Users/danielbogart/Documents/coding/work/AexNav/bower_components/angular-mocks/angular->mocks.js:17

Gruntfile config karma:

karma: { 
     options: { 
      frameworks: ['jasmine'], 
      files: [ 
       'dom_munger.data.appjs', 
       'tests/spec/*.js', 
       'bower_components/angular-mocks/angular-mocks.js' 
      ], 
      logLevel: 'ERROR', 
      reporters: ['mocha'], 
      autoWatch: false, //watching is handled by grunt-contrib-watch 
      singleRun: true 
     }, 
     all_tests: { 
      browsers: ['PhantomJS', 'Chrome'] 
     }, 
     during_watch: { 
      browsers: ['PhantomJS'] 
     } 
    } 

Grazie!

+1

Si avrebbe bisogno di includere angular.js così, allora solo angular.mocks lavoreranno altro window.angular sarà indefinito. – PSL

risposta

20

È necessario includere anche angular.js, quindi solo angular.mocks funzionerà altrimenti window.angular sarà indefinito.

files: [ 
      'dom_munger.data.appjs', 
      'path/to/angular.js', //<-- include angularjs 
      'bower_components/angular-mocks/angular-mocks.js', 
      'tests/spec/*.js' 
     ], 
+0

Perfetto, grazie. –

+0

Mi sono imbattuto anche in questo. Se utilizzi browserify, assicurati di aver bisogno del tuo pacchetto prima di aver bisogno di schivate angolari. –

+0

Per me era un file di riferimento mancante in "file" nel file di configurazione karma. –

2

angular-mocks.js presuppone che anche angular.js sia stato incluso.

+0

Immagino che jlew intendesse che angular.js deve essere incluso prima che angular-mocks.js sia incluso come: files: [ 'bower_components/angular/angular.js', 'bower_components/angular-mocks/angular -mocks.js ', – Stephane

3

aggiornamento per 2017 e webpack 2 (ma stesso angolare < 2)

  1. come @jlew detto, angolari-mock attende angolare sulla finestra

  2. riferimento modulo sostituendo il pacchetto web

Così nei test avete bisogno di un colpo di testa come:

import angular from 'angular'; 
import 'angular-mocks/ngMock'; 

e sostituire ogni module di riferimento globale con angular.mock.module

+2

ha quasi funzionato qui sul mio setup, per me il webpack dice che il modulo "angular" non ha un'esportazione predefinita. Ho risolto utilizzando: 'import * come angolare da" angolare ";' 'import" angular-mocks/ngMock ";' – marceloemanoel