web-dev-qa-db-ja.com

Karma + angular-mocks TypeError: 'undefined'はオブジェクトではありません( 'angular.mock = {}'を評価しています)

Karma + Jasmineを使用して単体テストを作成しようとしていますが、角度モックでエラーが発生しています。グラントテストを実行すると、次のエラーが発生します。

PhantomJS 1.9.8(Mac OS X)ERROR TypeError: 'undefined' is not a 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))エラーUncaught TypeError:/ Users/danielbogart/Documents/codingでundefinedのプロパティ 'mock'を設定できません/work/AexNav/bower_components/angular-mocks/angular->mocks.js:17

Gruntfile karma config:

    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']
        }
    }

ありがとう!

13
Daniel Bogart

Angular.jsも含める必要があります。そうすると、angular.mocksのみが機能し、それ以外の場合はwindow.angularが未定義になります。

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

2017およびwebpack 2の更新(ただし、角度は同じ<2)

  1. @jlewが言ったように、angular-mocksはウィンドウにangularを期待します

  2. モジュール参照はwebpackに置き換えられています

したがって、テストでは次のようなヘッダーが必要です。

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

各グローバルmodule参照をangular.mock.moduleに置き換えます

4
Amit Portnoy

angular-mocks.jsは、angular.jsも含まれていることを前提としています。

3
jlew

次のステートメントでこのエラーが発生しました:

angular.mock.module( 'ui.router' )

これは、ライブラリ宣言の誤った順序が原因でした:

karma.config.js:

...
files: ['./node_modules/angular-mocks/angular-mocks.js']
   .concat(dependencies),
...

dependenciesは私のライブラリのリストで、angular.jsが含まれていました)

私は単に'./node_modules/angular-mocks/angular-mocks.js'を依存関係リストに移動しますが、[〜#〜] after [〜#〜]angular.js

このような :

...
'./node_modules/angular/angular.js',
'./node_modules/angular-mocks/angular-mocks.js'
...

さらに進むには:

angular-mocks.jsを見ると、angular.jsが必要です。

/**
 * @license AngularJS v1.7.5
 * (c) 2010-2018 Google, Inc. http://angularjs.org
 * License: MIT
 */
(function(window, angular) {

'use strict';

/* global routeToRegExp: true */
...
0
Thibault