2013-07-12 3 views
8

カルマを使用してAngularJSの基本テストを行っています。私が書いたすべてのテストは構文的に正しいと思われます。しかし、私は最も基本的な段階、すなわちコードのbeforeEach部分で問題を抱えています。私がテストを実行しようとすると、私は次のような問題

TypeError: Cannot read property '$injector' of null 
at Object.workFn (http://localhost:9876/absolute/Users/vesriram/Documents/AngularJS%20project/vendor/js/angular-mocks.js:1698:15) 
at Object.<anonymous> (http://localhost:9876/adapter/lib/angular-scenario.js:26360:54) 
at Array.forEach (native) 
at Object.forEach (http://localhost:9876/adapter/lib/angular-scenario.js:9593:11) 

を取得し、私は、過去36時間にこの問題を解決しようとしていると、これまでのところ運がなかったです。私が見る限り、誰もこの問題を抱えていないようです。これは私がおそらく何かばかげたことをしていると思うようにする。私はあなたが人々に私に与えることができるどんな助けにも本当に感謝します。私はあなたが必要とする追加のコードを投稿することができます(私がそれを漏らす自由にいる限り)。

関連するコードがfollowing-

app.js

var sell_page = angular.module("sell_page", ['ui.bootstrap']); 

sell_page.controller('ItemTitleController', ['$scope','listingInformationService', '$location',function($scope, listingInformationService, $location) { 
    $scope.itemNames = getAllItemNames(); 
    $scope.draftItems = getAllSavedDrafts(); 
    document.getElementById("categorySelection").style.visibility = "hidden"; 

    ------bunch of code------- 
}]); 

controllersSpec.js

describe("Unit: Testing Controllers", function() { 

beforeEach(angular.mock.module('sell_page')); 

it('should have a ItemTitleController controller', function() { 
    expect(sell_page.ItemTitleController).not.to.equal(null); 
}); 


describe("ItemTitleController", function() { 
    var scope; 
    beforeEach(angular.mock.module('sell_page')); 
    beforeEach(angular.mock.inject(function($rootScope, listingInformationService, $location, $controller) { 
     var scope = $rootScope.$new(); 
     var controller = $controller('ItemTitleController', { 
      $scope : scope 
     }); 
    })); 

    it("should display xxx properly", function() { 
     --some code--- 
    }); 

}); 

karma.conf.js

であります問題は、単にその外側非閉じ )または }

とき

basePath = ''; 

files = [ 
    JASMINE, 
    JASMINE_ADAPTER, 
    '../vendor/js/angular.min.js', 
    '../vendor/js/angular.js', 
    '../vendor/js/angular-mocks.js', 
    '../vendor/js/angular-scenario.js', 
    ANGULAR_SCENARIO, 
    ANGULAR_SCENARIO_ADAPTER, 
    '../app/js/*.js', 
    'e2e/*.js', 
    'midway/*.js', 
    'unit/*.js',  
]; 

exclude = [ 
]; 

reporters = ['progress']; 
port = 9876; 
runnerPort = 9100; 
colors = true; 
logLevel = LOG_INFO; 
autoWatch = true; 
browsers = ['Chrome']; 
captureTimeout = 60000; 
singleRun = false; 
+1

ANGULAR_SCENARIOとANGULAR_SCENARIO_ADAPTERがE2Eテストのためにそう含める必要はないです..私はそれはしかし、あなたの問題だとは思いません。 –

+0

ええ、e2eテストもあります。私はそれらを含めていない彼らはうまく働いていると私の現在の問題に無関係です。 :) – user2438247

+2

あなたの問題を解決しましたか? – Chad

答えて

0

私は一般的に、このエラーに遭遇し、問題をデバッグするためのアプローチは、問題が消えるまで簡素化するかもしれません。つまり、問題を「バイナリ検索」するまで、一度に少しずつコードの大部分を取り除きます。

2

これは修正がすべてであるならば、私は正直わかりません、それはおそらく唯一のモカのために動作しますが、私は同じことに走っていたし、私はこれに最初beforeEachビットを変更:

beforeEach(function() { module('myApp'); }); 

とうまくいっているようです。テストフレームワーク(私の場合はmocha)にメソッドのラップバージョンを持たせると、angular.mocks.module呼び出しのタイミングがより良くなるようです。

0

私は同じ問題があります。あなたは角度1.0.8角度-皮肉っ1.0.8を使用するときに私の場合は

、このエラーは、ジャスミンの新しいバージョンで発生(2.0.0+、実際にはそれほど新しいものではありません)

角モックはJasmineの内部変数を前提としており、新しいバージョンではもう存在しません。詳細は、https://github.com/angular/angular.js/issues/5632を参照してください。

解決策は、あなたの角度(私の場合は不可能)をアップグレードするか、ジャスミンをダウングレードすることです。

カルマを実行するためにグランツを使用する場合、カルマジャスミンをバージョン '〜0.1.0'にダウングレードするとこの問題が修正されます。このバージョンにはジャスミンが含まれているので、devDependenciesから 'jasmine-core'も削除する必要があります。以下のdevDependenciesのセットが私のために働いた。

"devDependencies": { 
    "grunt-karma": "^0.10.1", 
    "karma": "^0.12.31", 
    "karma-chrome-launcher": "^0.1.7", 
    "karma-coverage": "^0.2.7", 
    "karma-jasmine": "~0.1.0", 
    "karma-junit-reporter": "^0.2.2", 
    "karma-phantomjs-launcher": "^0.1.4", 
    "phantomjs": "^1.9.15", 
} 
関連する問題